【发布时间】:2020-04-07 22:34:47
【问题描述】:
假设我有一个IEnumerators 的列表:
public List<IEnumerator> routines;
假设我有这个枚举:
public enum Shape { CIRCLE, TRIANGLE, SQUARE }
我有很多IEnumerator 例程接收Shape 作为参数:
public IEnumerator Move(Shape shape, float distance){ /* code */ }
public IEnumerator Jump(Shape shape, float height){ /* code */ }
public IEnumerator Fire(Shape shape, float power){ /* code */ }
我的列表routines 将包含这些函数的一系列实例(稍后将使用StartCoroutine 调用):
routines.Add(Move(Shape.SQUARE, 1));
routines.Add(Jump(Shape.CIRCLE, 1));
routines.Add(Fire(Shape.TRIANGLE, 1));
//...
鉴于我已经用所有这些函数填充了 routines,有没有办法让我遍历 routines 并找出每个函数调用的 Shape 参数?在这种情况下,它将是 SQUARE、CIRCLE、TRIANGLE 等。
【问题讨论】:
-
你需要
Expression<...>(表达式树)——它存在于Unity3d中吗? -
是的,来自
System.Linq.Expressions。 -
所以使用表达式作为
.Add的参数而不是Action<Shape, int>- 你不能反编译 lambdas 来提取参数,但你可以编译表达式来运行它们(并且确实可以提取参数)跨度>
标签: c# unity3d ienumerator