首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IEnumerator<T>实现

IEnumerator<T>实现
EN

Stack Overflow用户
提问于 2009-10-22 03:45:32
回答 5查看 3.2K关注 0票数 3

我有一个这个代码

代码语言:javascript
复制
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..。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-22 03:48:34

这一点:

代码语言:javascript
复制
public List<SomeClass<T>> MyList = new List<SomeClass<T>>();

需要是这样的:

代码语言:javascript
复制
public List<T> MyList = new List<T>();

然后,这应该是可行的:

代码语言:javascript
复制
public IEnumerator<T> Getenumerator ()
{
  foreach (var item in MyList){
     yield return item;}
}

你不能有一个

代码语言:javascript
复制
List<SomeClass<T>>

这是因为您在接口中指定了枚举器将返回<T>的可枚举项。您还可以将IEnumerable<T>更改为

代码语言:javascript
复制
IEnumerable<SomeClass<T>>

并将枚举数更改为

代码语言:javascript
复制
public IEnumerator<SomeClass<T>> Getenumerator ()
{
  foreach (var item in MyList){
     yield return item;}
}
票数 7
EN

Stack Overflow用户

发布于 2009-10-22 03:47:00

简单的选项是return MyList.GetEnumerator()

票数 1
EN

Stack Overflow用户

发布于 2009-10-22 04:23:00

凯文斯的答案是正确的是懒惰的(甚至更好)。如果使用Trodek响应,将抛出以下异常:

代码语言:javascript
复制
Cannot implicitly convert type `System.Collections.Generic.List<SomeClass<T>>.Enumerator' to `System.Collections.Generic.IEnumerator<T>'(CS0029)

尽管如此,我还是想添加一条评论。当您使用 you 时,会生成一个状态机,它将返回不同的值。如果您打算使用嵌套数据结构(例如,树),那么使用yield return将分配更多的内存,因为每个子结构中都会创建一个不同的状态机。

好吧,这就是我的两个观点!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1603154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档