あなたはIsGenericType
、ないIsGenericParameter
をしたい:
bool isGeneric = typeof(Foo<int>).GetField("Data").FieldType.IsGenericType;
あなたがList
のパラメータを知りたいなら、あなたは1つの以上のレベルを見下すする必要があり、汎用的である:
bool isGeneric = typeof(Foo<>).GetField("Data")
.FieldType
.GetGenericArguments()[0] // only generic argument to List<T>
.IsGenericParameter;
Data
フィールドがDictionary
の場合はDictionary<string, T>
となります。どのタイプが汎用パラメータを使用していたかはどのように判断するのですか?
タイプの
コールGetGenericArguments
、それが一般的なものであればかであるかどうかを確認するためにタイプの汎用パラメータを見ると基本的には、IsGenericParameter
が使用されている結果の配列
public class Foo<T>
{
public Dictionary<string, T> Bar;
}
Type[] types = typeof(Foo<>).GetField("Bar").FieldType.GetGenericArguments();
Console.WriteLine("{0}\n{1}",
types[0].IsGenericParameter, // false, type is string
types[1].IsGenericParameter // true, type is T
);
に各タイプを見てタイプがsepcifiedです。
System.Type'あなたが持っているインスタンス? 'typeof(Foo <>)'や 'typeof(Foo)'のようなものですか? –
dasblinkenlight
こんにちは@dasblinkenlightインスタンスはFooです。 –
alexc95
ちょうどこれに追加するために、私はその後、Fooを使用して、データフィールドに、リストの後に、文字列自体がtrueに設定されている 'IsGenericParameter'を持っていないので、フィールドを繰り返します。 –
alexc95