我有一个这个代码
public class SomeClass<T>: IEnumerable<T>
{
public List<SomeClass<T>> MyList = new List<SomeClass<T>>();
public IEnumerator<T> GetEnumerator()
{
throw new NotImplementedException();
}
}如何从MyList中提取IEnumerator?
谢谢StackoverFlower..。
发布于 2009-10-22 03:48:34
这一点:
public List<SomeClass<T>> MyList = new List<SomeClass<T>>();需要是这样的:
public List<T> MyList = new List<T>();然后,这应该是可行的:
public IEnumerator<T> Getenumerator ()
{
foreach (var item in MyList){
yield return item;}
}你不能有一个
List<SomeClass<T>>这是因为您在接口中指定了枚举器将返回<T>的可枚举项。您还可以将IEnumerable<T>更改为
IEnumerable<SomeClass<T>>并将枚举数更改为
public IEnumerator<SomeClass<T>> Getenumerator ()
{
foreach (var item in MyList){
yield return item;}
}发布于 2009-10-22 03:47:00
简单的选项是return MyList.GetEnumerator()。
发布于 2009-10-22 04:23:00
凯文斯的答案是正确的,是懒惰的(甚至更好)。如果使用Trodek响应,将抛出以下异常:
Cannot implicitly convert type `System.Collections.Generic.List<SomeClass<T>>.Enumerator' to `System.Collections.Generic.IEnumerator<T>'(CS0029)尽管如此,我还是想添加一条评论。当您使用 you 时,会生成一个状态机,它将返回不同的值。如果您打算使用嵌套数据结构(例如,树),那么使用yield return将分配更多的内存,因为每个子结构中都会创建一个不同的状态机。
好吧,这就是我的两个观点!
https://stackoverflow.com/questions/1603154
复制相似问题