Рассмотрим следующий код:Неожиданное поведение с помощью Type.GetMethod (имя строки, тип [] типы)
public static class FooHelpers
{
public static void Foo(int bar)
{
//...
}
public static void Foo(uint bar)
{
//...
}
public static void Foo(long bar)
{
//...
}
public static void Foo(ulong bar)
{
//...
}
}
Теперь у меня есть некоторое отражение код, который дается тип и проверяет, если существует Foo
метод с параметром данного типа. Если такого метода Foo
не существует, моя программа должна пропустить шаг. Вот способ, которым можно воспользоваться:
public static MethodInfo GetFooMethodIfExists(Type parameterType)
{
return typeof(FooHelpers).GetMethod("Foo", new Type[] { parameterType });
}
Похоже на разумное решение, нет? Согласно документации на Type.GetMethod(string name, Type[] types)
:
// Returns:
// A System.Reflection.MethodInfo object representing the public method whose
// parameters match the specified argument types, if found; otherwise, null.
Теперь давайте попробуем следующее:
MethodInfo m = GetFooMethodIfExists(typeof(short));
Вместо возвращения нулевой, то он возвращается метод с параметром int
. Я только что закончил проект с отражением, который полагался на результат Type.GetMethod(string name, Type[] types)
, чтобы вести себя как состояние документации, и это вызывает множество проблем.
Может кто-нибудь скажет мне, почему это происходит и/или объясняет другой способ сделать это?
Спасибо, что исправлено все :) –