MethodInfo
GenericMethodDefinitionがあります。例:CallMethod<T>(T arg, string arg2)
。GetParameters()メソッドは2つのParameterInfoオブジェクトを提供します。最初のオブジェクトは汎用であり、2番目のオブジェクトはそうではありません。ParameterInfoを取得して、それが汎用であることを通知するにはどうすればよいですか?制約がある場合はどうですか?
4 に答える
チェックしてくださいParameterType.IsGenericParameter
。
を確認することもできます。ContainsGenericParameters
これは、のようなものに当てはまりますMyMethod<T>(List<T> param)
。(List<>
一般的なパラメーターではありませんが)
IsGenericParameter
trueの場合、呼び出してインターフェースまたは基本型の制約を取得することもできます。GetGenericParameterConstraints()
また、GenericParameterAttributes
([Flags]
列挙型)で、、、new()
またはstruct
制約を確認することもできclass
ます。
私はあなたがこれらを探していると思います:
parameterInfo.ParameterType.ContainsGenericParameters
parameterInfo.ParameterType.GetGenericParameterConstraints()
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
多分ここであなたは一般的なパラメータを反映することについての情報を見つけるでしょう...