我正在尝试在扩展另一个类的类中执行此操作,该类实现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完成吗?
答案 0 :(得分:3)
不,不能用foreach完成。
C#中的this
和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
}
}