Отредактировано: Оказывается, ошибки, о которых я говорил ниже в своем исходном вопросе, возникают только при выполнении этого оператора на панели режима 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'.