用foreach枚举基数

时间:2012-04-24 08:56:44

标签: c# ienumerable

我正在尝试在扩展另一个类的类中执行此操作,该类实现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完成吗?

1 个答案:

答案 0 :(得分:3)

不,不能用foreach完成。

C#中的thisbase访问权限存在很大差异。使用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
    }
}