Как определить, имеет ли параметры общего типа?
-
12-10-2019 - |
Вопрос
у меня есть 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
Может быть здесь Вы найдете информацию о отражении общих параметров ...