0

编辑:原来我在下面的原始问题中报告的错误仅在调试器中停止时在Visual Studio即时模式面板中执行此语句时发生。

类型。GetMethod(“Log”,新类型[]{typeof(string)});

当在程序本身中执行时,该语句返回我正在寻找的方法,并且我可以将其用作委托。

我修改过的问题是:为什么在调试器即时模式面板中执行此操作会生成错误?有没有办法在调试器即时模式面板中执行此语句而不出错?

----下面是原始问题----

我正在编写一些代码,这些代码既可以在Unity3D中运行,也可以单独运行,并且有一个自定义记录器,应该委托给Unity3D调试。日志()在Unity跑步时。

Unity列出了Debug的两个方法签名。日志:

公共静态void Log(对象消息);公共静态void Log(对象消息,对象上下文);

我能得到UnityEngine类型。使用反射进行调试:

类型类型=系统。反思。组装。加载(“UnityEngine.CoreModule”)。GetType(“UnityEngine.Debug”);

但是,我无法使用GetMethod()成功获取Log方法。

我可以看到使用GetMethods()列出的两个Log方法签名。我正在寻找第一个:[11]:{Void Log(System.Object)}

>类型。获取方法();{System.Reflection.MethodInfo[47]}[0]:{UnityEngine.ILogger get_unityLogger()}[1] :{无效绘图线(UnityEngine.Vector3,UnityEnginee.Vector3、UnityEngine.Color,Single)}[2] :{无效绘图线(UnityEngine.Vector3、UnityEnginee.Vector3和UnityEngine.Color)}[3] :{无效绘图线(UnityEngine.Vector3,UnityEngine.Vector3)}[4] :{空心绘制线(UnityEngine.Vvector3、UnityEngine.Vvector3、UnityEngine.Color、Single、Boolean)}[5] :{无效DrawRay(UnityEngine.Vector3,UnityEnginee.Vector3、UnityEngine.Color,Single)}[6] :{Void DrawRay(UnityEngine.VVector3、UnityEngine.VVector3、UnityEngine.Color)}[7] :{无效DrawRay(UnityEngine.Vector3,UnityEngine.Vector3)}[8] :{无效DrawRay(UnityEngine.Vector3,UnityEnginee.Vector3、UnityEngine.Color、Single、Boolean)}[9] :{空心断开()}[10] :{无效调试中断()}[11] :{无效日志(System.Object)}[12] :{无效日志(System.Object,UnityEngine.Object)}...

看一看类似问题的答案避免不明确的匹配异常以下是我尝试过的:

>类型。GetMethod(“日志”);系统。反思。AmbiguousMatchException:找到不明确的匹配。>类型。GetMethod(“日志”,新类型[]{typeof(System.Object)});在类型“System”中找不到方法“CreateInstance”。数组”。>类型。GetMethod(“Log”,新类型[]{typeof(string)});在类型“System”中找不到方法“CreateInstance”。数组”。
  • 此例外似乎不是由GetMethod(获取方法)方法本身,但在某个更深的地方。你能提供异常的完整堆栈跟踪吗?
    – 二元体
    评论 2018年12月6日10:20
  • 谢谢你问这个问题dymanoid。我上面报告的错误是在断点处暂停并在Visual Studio的即时模式面板中输入语句时生成的。当我执行type时。GetMethod(“Log”,新类型[]{typeof(string)});在程序代码中,它运行无误。我很好奇为什么这些语句在即时模式面板中不起作用。更好地理解即时执行语句时的错误并不能反映程序执行过程中会发生什么,这将使我的调试更加高效。我将修改这个问题以反映这一点。 评论 2018年12月6日14:12
  • 见修改后的问题。我想了解当在调试器即时模式面板中运行语句时,何时对报告的错误进行折扣,以提高调试效率。 评论 2018年12月6日14:28

0

重置为默认值

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.