Возможно ли в .NET Framework использовать отражение, чтобы напрямую искать общий метод?C#

Место общения программистов C#
Anonymous
Возможно ли в .NET Framework использовать отражение, чтобы напрямую искать общий метод?

Сообщение Anonymous »

В ядре существуют перегрузки и методы в объекте Type , чтобы вы могли иметь возможность получить метод напрямую. Использование type.makegenericmethodparameter () для создания типов заполнителей, чтобы позволить вам заменить параметры метода и метод info.getmethod () с перегрузками, чтобы указать количество общих параметров в методе.

Код: Выделить всё

// very simplified
public string CallToString(object value)
{
var type = value.GetType();
if (!type.IsGenericType)
return ToString(value);

var method = GetType().GetMethod("ToString", 1, // `1` indicates how many generic parameters the method would have
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance,
new[] { Type.MakeGenericMethodParameter(0) } // use placeholder type for the generic parameter
);
if (method != null)
return (string)method.MakeGenericMethod(type).Invoke(this, [value])!;

return ToString(value);
}

private string ToString(object arg)
{
return $"ToString(object)";
}

private string ToString(T arg)
{
return $"ToString({typeof(T).Name})";
}
Однако я работаю в приложении .NET Framework и не имеет ни метода Type.MakeGenericMethodParameter () , чтобы сделать заполнитель, ни метод int.getMethod () перегрузка для общего количества параметров. Я мог бы выполнить поиск вручную, вызывая type.getMethods () и поиск метода, который я ищу (что я делаю), но, конечно, прямой подход существует правильно? Если бы я хотел, я, вероятно, мог бы даже пойти по маршруту использования Dynamic , чтобы компилятор выяснил его, но я бы предпочел не открывать, что для этого может быть червей.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... c-method-d

Вернуться в «C#»