我正在尝试在扩展另一个类的类中执行此操作,该类实现了 IEnumerable<T>
:
public override IEnumerator<T> GetEnumerator(){
foreach (var item in base){
// Some logic here
yield return item;
// Some more logic here
}
}
然而,这失败了,编译错误指出“base”使用不正确。
我想继承父类的所有行为,除了将一些“虚拟”项插入枚举集合并跳过一些其他项。
我通过手动操作枚举器解决了这个问题(本质上是做 foreach
扩展到除了在 GetEnumerator
上调用 base
而不是 this
)。但这并不会产生最直接的代码。
所以我的问题是:这可以用 foreach 完成吗?
最佳答案
不,它不能用 foreach 完成。
this
和 C# 中的 base
访问有很大区别。当您使用 this
关键字时,它被归类为一个值(值的类型是使用发生的类的实例类型)。但是 base
关键字永远不会被视为一个值。它可能是 base-access 的一部分表达式,用于访问被当前类中同名成员隐藏的基类成员:
base.identifier
base[argument-list]
因此,通过base
关键字您只能访问基类的成员。但它不被视为基本类型的值,并且它不能成为使用值的表达式的一部分(例如转换、foreach 语句等)。
唯一有效的方法是访问基类的成员:
public override IEnumerator<T> GetEnumerator()
{
IEnumerator<T> enumerator = base.GetEnumerator();
while (enumerator.MoveNext())
{
T item = enumerator.Current;
// Some logic here
yield return item;
// Some more logic here
}
}
关于c# - 用 foreach 遍历基数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10294742/