【发布时间】:2009-09-23 20:29:04
【问题描述】:
假设我有一个类 TestCollection 用于保存 Test 类型的对象,并定义为
public class TestCollection : CollectionBase
这允许我以
的形式遍历集合foreach(object o in collection)
...
或
foreach(Test t in collection)
但不允许我使用新的 Linq 查询。
如果我将类的定义更改为
public class TestCollection : CollectionBase, IEnumerable<Test>
并添加一个方法
public new IEnumerator<Test> GetEnumerator()
{
foreach (Test o in this.List)
yield return o ;
}
那么 linq 查询可用。
然而,这个新方法不仅在 linq 查询中被调用,而且在遗留代码中也被调用(即在 foreach(object o in collection) 和 foreach(Test in Collection) 期间。
遍历集合的旧方法和假设集合中所有项目都是 Test 类型的新方法之间有什么区别吗?我知道添加 IEnumerator 方法会导致程序在找到除 Test 以外的任何类型时引发异常,但想知道我是否忽略了任何内容。
【问题讨论】:
标签: c# generics collections