ToString()可以返回除“;系统.行动”;

本文关键字:系统 行动 返回 ToString | 更新日期: 2023-09-27 18:11:15

我在Unity中编程,使用Action事件来容纳一堆其他Action委托,以便将非Monopahavior对象挂接到Update((系统中。我希望能够将操作的名称打印到调试控制台,但使用以下内容:

Delegate[] actions = updateActions.GetInvocationList();
foreach ( Delegate del in actions ) {
    Debug.Log( del.ToString() );
}

只返回"System.Action"。我也尝试过(del as Action(.ToString((,但没有成功。

ToString()可以返回除“;系统.行动”;

您可以使用Method属性来获取应该具有有用名称的MethodInfo

Delegate[] actions = updateActions.GetInvocationList();
foreach ( Delegate del in actions )
{
    Debug.Log( del.Method.ReflectedType.FullName + "." + del.Method.Name );
}

如果您想要签名,则可以使用del.Method.ToString();如果您只想要名称,则使用del.Method.Namedel.Method.ReflectedType.FullName为您提供类型名称。

对于lambdas/匿名方法,名称可能不会太有用,因为它们只有编译器生成的名称。在当前实现中,lambda的名称类似于<Main>b__0,其中Main是包含lambda的方法的名称。与类型名称一起,这应该会让您清楚地知道它是哪个lambda。

如果您的意思是声明一个委托

var foo = new Action(() => { /* do something */ });

如果你想稍后检索单词"foo",那你就倒霉了。要获得这种行为,您必须将声明作为表达式树使用,并自己解析出foo