parameterInfoが一般的なタイプのかどうかを判断する方法は?
-
12-10-2019 - |
質問
私は持っています MethodInfo
GenericMethodDefinitionの。そのような: CallMethod<T>(T arg, string arg2)
. 。 getParameters()メソッドは、2つのparameterInfoオブジェクトを提供します。最初のオブジェクトは汎用で、2番目は汎用ではありません。 ParameterInfoを取得してジェネリックであることを伝えるにはどうすればよいですか?制約がある場合はどうですか?
解決
小切手 ParameterType.IsGenericParameter
.
確認することもできます ContainsGenericParameters
, 、それはようなものに当てはまります MyMethod<T>(List<T> param)
. 。 (それでも List<>
一般的なパラメーターではありません)
もしも IsGenericParameter
本当です、あなたも電話することができます GetGenericParameterConstraints()
インターフェイスまたはベースタイプの制約を取得するには、確認できます GenericParameterAttributes
(a [Flags]
enum)for 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
多分 ここ 一般的なパラメーターの反映に関する情報が見つかります...