我试图在扩展另一个类的类中执行此操作,该类实现IEnumerable<T>:
public override IEnumerator<T> GetEnumerator(){
foreach (var item in base){
// Some logic here
yield return item;
// Some more logic here
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这会失败,并出现编译错误,指出“base”使用不正确。
我想继承父类的所有行为,除了将一些“虚拟”项目插入枚举集合并跳过一些其他项目之外。
我通过手动操作枚举器来解决这个问题(本质上是执行foreach扩展为 except 调用GetEnumeratoronbase而不是 的操作this)。但这并不能产生最直接的代码。
所以我的问题是:这可以用 foreach 来完成吗?
不,这不能用 foreach 来完成。
thisC# 中的和access有很大的区别base。当您使用this关键字时,它被分类为值(值的类型是使用时发生的类的实例类型)。但base关键字永远不会被视为值。它可以是基访问表达式的一部分,用于访问被当前类中类似命名的成员隐藏的基类成员:
base.identifier
base[argument-list]
Run Code Online (Sandbox Code Playgroud)
因此,通过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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
709 次 |
| 最近记录: |