Вопрос

у меня есть MethodInfo общего маметоддефинирования. Такие как: CallMethod<T>(T arg, string arg2). Анкет Метод getParameters () даст мне два объекта параметринфо, первый из которых общий, второй из которых не является. Как я могу получить ParameterInfo, чтобы сказать мне, что он общий? Как насчет того, если у него есть ограничения?

Это было полезно?

Решение

Проверять ParameterType.IsGenericParameter.
Вы также можете проверить ContainsGenericParameters, что будет правдой для чего -то вроде MyMethod<T>(List<T> param). Анкет (Несмотря на то List<> не общий параметр)

Если IsGenericParameter это правда, вы также можете позвонить GetGenericParameterConstraints() Чтобы получить ограничения интерфейса или базового типа, и вы можете проверить GenericParameterAttributes[Flags] enum) для new(), struct, или же class ограничения.

Другие советы

Я думаю, вы ищете это:

parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()

В дополнение к ответу других на второй вопрос: да, мы можем получить ограничения от ParameterInfo с использованием GetGenericParameterConstraints(), но это не работает для всех обстоятельств. Рассмотрим какой -то общий метод, подобный этому:

public static void MyMethod<T,V>() where T : Dictionary<int, int>
{
}

Существует ограничение для этого метода, но метод не имеет параметров (подумайте о Перечисление. CASCE) Я собираюсь сказать, что ограничение не является частью параметров, а сам метод. Мы можем получить ограничения по:

method.GetGenericArguments()[0].BaseType  //the constraint of T
method.GetGenericArguments()[1].BaseType  //that of V: Object

Может быть здесь Вы найдете информацию о отражении общих параметров ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top