声明后修改IEnumerator

时间:2015-12-27 10:45:05

标签: c# unity3d ienumerable

我一直在使用Unity C#。我真的不了解IEnumerators,但假设我有以下内容:

IEnumerator some_function(int a) { ... }

IEnumerator f = some_function(0);

有没有办法更改现有f的参数值,以便它等同于声明,例如:

IEnumerator f = some_function(5);

2 个答案:

答案 0 :(得分:4)

简短的回答是

你可以再次调用你的方法。或者,您可以将行为打包在新的类或方法中。但IEnumerable<>或使用过的枚举器与生成器没有任何关联,允许这样做。

答案 1 :(得分:2)

如果您还没有开始列举您的功能结果,那么只需再次调用您的功能就没有问题:

IEnumerable f = some_function(0);
f = some_function(5);

如果已经开始枚举函数的结果,并且您希望现有的调用继续使用新值,那么请考虑一个帮助程序类:

class SomeFunctionData {
  public int a;
}

IEnumerable some_function(SomeFunctionData data);

然后

var data = new SomeFunctionData { a = 0 };
IEnumerable f = some_function(data);
...
data.a = 5;

如果some_function继续查看现有的SomeFunctionData实例,那么它将会看到a的新值。请注意,在大多数情况下,这会导致难以理解的程序逻辑,因此在实现之前请检查您是否真的需要它,但在某些情况下它会很有用。