質問

私は持っています 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

多分 ここ 一般的なパラメーターの反映に関する情報が見つかります...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top