我一直在尝试使classTwo可枚举,但我收到一个错误,我不太明白,因为我正在查看的大部分资源都包含这段代码......
jsFiddle:
但我在返回线上收到错误。这是我的其余代码...
public IEnumerator GetEnumerator() {
return (IEnumerator)this;
}
答案 0 :(得分:1)
首先,
return (IEnumerator)this;
classTwo
没有实现IEnumerator
,因此您无法将其转换为IEnumerator
。
此外,如果要枚举classTwo
,那么它应该实现IEnumerable
。您将定义另一个实现IEnumerator
的类,然后GetEnumerator
将返回该类的实例。
答案 1 :(得分:1)
您收到错误是因为classTwo
不是IEnumerator
。您需要声明它是(class classTwo : IEnumerator
),然后实施IEnumerator
界面的方法(Current
,MoveNext()
和Reset()
):
class classTwo : IEnumerator {
public object Current {get;}
public bool MoveNext() { ... }
public void Reset() { ... }
...
public IEnumerator GetEnumerator()
{
return this;
}
}
如果您只想让它在foreach
语句中可用,那么您可以使用yield
语句编写迭代器:
public IEnumerator GetEnumerator()
{
yield return a;
yield return b;
yield return c;
}
答案 2 :(得分:0)
我知道它没有回答如何实现IEnumerable / IEnumerator的问题,但由于所有字段都是相同的类型(classOne),你可以简单地使用数组或集合(特定的列表)来&# 34;束"你可以在foreach循环中插入引用的引用(从你的一条评论中获取)。 classTwo,至少在你目前的形式,将变得多余。
usuage示例
//if you know how many elements it will be, use an array
ClassOne[] classOneArray = new ClassOne[3];
ClassOne[0] = new ClassOne(); //a
ClassOne[1] = new ClassOne(); //b
ClassOne[2] = new ClassOne(); //c
foreach(ClassOne element in classOneArray) {
//do smthg
}
//if you dont know how many elements it will be, use a list
List<ClassOne> classOneList = new List<ClassOne>();
classOneList.Add(new ClassOne()); //a
classOneList.Add(new ClassOne()); //b
classOneList.Add(new ClassOne()); //c
foreach(ClassOne element in classOneList) {
//do smthg
}
List<T>
要求您使用System.Collections.Generic - 您还可以使用大量其他集合,具体取决于您需要放置数据的方式。
如果您有特定用例需要自己实现界面并参考其他两个答案,请忽略答案。