c# - Action.ToString() 可以返回 "System.Action"以外的任何东西吗?

标签 c# action tostring

我在 Unity 中编程,使用一个 Action 事件来保存一堆其他 Action 委托(delegate),以便将非 Monobehaviour 对象挂接到 Update() 系统中。我希望能够将操作的名称打印到调试控制台,但使用类似:

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

... 只返回“System.Action”。我也试过 (del as Action).ToString() 没有运气。

最佳答案

您可以使用 Method属性(property)获得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。

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

相关文章:

ios - 键盘完成键 Action swift iOS 不起作用

javascript - Emberjs 没有处理这个 Action

c# - 起订量。执行作为参数给出的操作

node.js - 错误 : toString failed Node. js 缓冲区

c# - 隐式和显式 StringBuilder.ToString() 方法调用之间有什么区别?

c# - "OnCollisionEnter()"中的协程 (WaitForSeconds()) 给出编译错误

c# - 这段代码中的 IEventRepository 是什么? Resolver.resolve( ) 是做什么的?

c# - 更改表单区域按钮图标

c# - ESE 列类型到 XmlSerialize 任意对象

java - HttpRequestBase - 如何打印请求及其所有数据