我正在Unity中进行编程,使用Action事件来容纳其他Action委托(delegate),以便将非Monobehaviour对象挂接到Update()系统中。我希望能够将 Action 的名称打印到Debug控制台,但是可以使用类似以下的方式:

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

...仅返回“System.Action”。我也尝试过(del作为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.Namedel.Method.ReflectedType.FullName为您提供类型名称。

对于lambdas/匿名方法,该名称可能不太有用,因为它们仅具有编译器生成的名称。在当前的实现中,lambda的名称类似于<Main>b__0,其中Main是包含lambda的方法的名称。连同类型名称一起,这应该使您对它是lambda有一个体面的认识。

关于c# - Action.ToString()可以返回 "System.Action"以外的任何东西吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7757342/

10-13 06:16