7

MethodInfoGenericMethodDefinitionがあります。例:CallMethod<T>(T arg, string arg2)。GetParameters()メソッドは2つのParameterInfoオブジェクトを提供します。最初のオブジェクトは汎用であり、2番目のオブジェクトはそうではありません。ParameterInfoを取得して、それが汎用であることを通知するにはどうすればよいですか?制約がある場合はどうですか?

4

4 に答える 4

7

チェックしてくださいParameterType.IsGenericParameter
を確認することもできます。ContainsGenericParametersこれは、のようなものに当てはまりますMyMethod<T>(List<T> param)。(List<>一般的なパラメーターではありませんが)

IsGenericParametertrueの場合、呼び出してインターフェースまたは基本型の制約を取得することもできます。GetGenericParameterConstraints()また、GenericParameterAttributes[Flags]列挙型)で、、、new()またはstruct制約を確認することもできclassます。

于 2011-01-19T17:59:14.643 に答える
3

私はあなたがこれらを探していると思います:

parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
于 2011-01-19T18:00:51.487 に答える
2

2番目の質問に対する他の人の回答に加えて:はい、をParameterInfo使用して制約を取得できますGetGenericParameterConstraints()が、すべての状況で機能するとは限りません。次のような一般的な方法を検討してください。

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

このメソッドには制約がありますが、メソッドにはパラメーターがありません ( Enumerable.Castについて考えてください)。私が言おうとしているのは、制約はパラメーターの一部ではなく、メソッド自体であるということです。次の方法で制約を取得できます。

method.GetGenericArguments()[0].BaseType  //the constraint of T
method.GetGenericArguments()[1].BaseType  //that of V: Object
于 2011-01-19T18:21:17.617 に答える
1

多分ここであなたは一般的なパラメータを反映することについての情報を見つけるでしょう...

于 2011-01-19T18:00:42.630 に答える