声明后修改 IEnumerator

Modifying an IEnumerator after declaration

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

IEnumerator some_function(int a) { ... }

IEnumerator f = some_function(0);

有没有办法改变现有f的参数值,使其等同于声明,例如:

IEnumerator f = some_function(5);

简短的回答是

显然你可以再次调用你的方法。或者您可以将您的行为打包到一个新的 class 或方法中。但是 IEnumerable<> 或使用的枚举器与允许这样做的生产者没有任何联系。

如果您还没有开始枚举函数的结果,只需再次调用您的函数就完全没有问题:

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

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

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 的新值。请注意,在大多数情况下,这会导致难以理解的程序逻辑,因此在实现之前检查您是否真的需要它,但在某些情况下它很有用。