【发布时间】:2015-12-02 23:24:06
【问题描述】:
这是与 Unity 中的 C# 相关的消息,但我假设一般 C# 知识将适用。
取以下代码:
class myClass
{
IEnumerator myEnumerator;
public IEnumerator theEnumerator()
{
int i = 0;
while (true)
{
Debug.Log(i++);
yield return null;
}
}
public void Update()
{
if (myEnumerator == null) { myEnumerator = theEnumerator(); }
myEnumerator.MoveNext();
}
}
如果我实例化该类,然后每帧调用一次“更新”,我会在日志中得到以下输出:
0
1
2
3
4...
这很好用,但是我想在 IEnumerator 本身中实现一些自定义功能。但如果我创建以下内容:
public class myIEnumerator : IEnumerator
{
public int myCustValue;
public void myCustFunction(){}
}
然后更新 oringal 类,将“IEnumerator”替换为“myIEnumerator”,出现以下错误:
The body of `myClass.theEnumerator()' cannot be an iterator block because `myIEnumerator ' is not an iterator interface type
我在这里做错了什么,如何制作自己的自定义 IEnumerator?
【问题讨论】:
-
我认为这是编译器的问题,编译器仅支持
IEnumerable、IEnumerable<T>、IEnumerator和IEnumerator<T>。继承不适用于迭代器块。 -
在docs, "Iterator Methods and get Accessors 迭代器的声明必须满足以下要求:返回类型必须是 IEnumerable、IEnumerable
、IEnumerator 或 IEnumerator . 声明不能有任何 ref 或 out 参数。”
标签: c# ienumerator