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((,但没有成功。
您可以使用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.Name
。del.Method.ReflectedType.FullName
为您提供类型名称。
对于lambdas/匿名方法,名称可能不会太有用,因为它们只有编译器生成的名称。在当前实现中,lambda的名称类似于<Main>b__0
,其中Main
是包含lambda的方法的名称。与类型名称一起,这应该会让您清楚地知道它是哪个lambda。
如果您的意思是声明一个委托
var foo = new Action(() => { /* do something */ });
如果你想稍后检索单词"foo",那你就倒霉了。要获得这种行为,您必须将声明作为表达式树使用,并自己解析出foo
。