GetType ("UnityEngine.Debug"). GetMethod ("Log", new Type [] {typeof (string)});генерирует ошибки в панели немедленного режима, а не в коде - PullRequest
0 голосов
/ 06 декабря 2018

Отредактировано: Оказывается, ошибки, о которых я говорил ниже в своем исходном вопросе, возникают только при выполнении этого оператора на панели режима Visual Studio Immediate при остановке в отладчике.

type.GetMethod("Log", new Type[] { typeof(string) });

При выполнении в самой программеоператор возвращает метод, который я ищу, и я могу использовать его в качестве делегата.

Мой пересмотренный вопрос таков: почему при выполнении этого в панели режима Debugger Immediate возникает ошибка?Есть ли способ выполнить это утверждение в панели немедленного режима отладчика без ошибки?

---- оригинальный вопрос ниже ----

Пишу код, который будет работать одновременноUnity3D и отдельно и иметь собственный регистратор, который должен делегировать Unity3D Debug.Log () при запуске в Unity.

Unity перечисляет две сигнатуры метода для Debug.Log:

 public static void Log(object message);
 public static void Log(object message, Object context);

Я могу получить тип UnityEngine.Debug, используя отражение:

Type type = System.Reflection.Assembly.Load("UnityEngine.CoreModule").
    GetType("UnityEngine.Debug");

Однако я не могу успешно получить метод Log с помощью GetMethod ().

Iможно увидеть две подписи метода Log, перечисленные с помощью GetMethods ().Я ищу первый: [11]: {Void Log (System.Object)}

> type.GetMethods();
{System.Reflection.MethodInfo[47]}
  [0]: {UnityEngine.ILogger get_unityLogger()}
  [1]: {Void DrawLine(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color, Single)}
  [2]: {Void DrawLine(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color)}
  [3]: {Void DrawLine(UnityEngine.Vector3, UnityEngine.Vector3)}
  [4]: {Void DrawLine(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color, Single, Boolean)}
  [5]: {Void DrawRay(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color, Single)}
  [6]: {Void DrawRay(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color)}
  [7]: {Void DrawRay(UnityEngine.Vector3, UnityEngine.Vector3)}
  [8]: {Void DrawRay(UnityEngine.Vector3, UnityEngine.Vector3, UnityEngine.Color, Single, Boolean)}
  [9]: {Void Break()}
  [10]: {Void DebugBreak()}
  [11]: {Void Log(System.Object)}
  [12]: {Void Log(System.Object, UnityEngine.Object)}
  ...

Здесь вы найдете ответы на похожий вопрос Как избежать неоднозначного совпаденияисключение вот что я пробовал:

> type.GetMethod("Log");
System.Reflection.AmbiguousMatchException: Ambiguous match found.

> type.GetMethod("Log", new Type[] { typeof(System.Object) });
Method `CreateInstance' not found in type `System.Array'.

> type.GetMethod("Log", new Type[] { typeof(string) });
Method `CreateInstance' not found in type `System.Array'.
...