确定属性类型是否为泛型类型参数

时间:2014-06-18 03:41:21

标签: c# generics reflection

说你有班级:

public class GenericModel<T1, T2>
{
    public T1 Model1 { get; set; }
    public T2 Model2 { get; set; }
}

如何判断使用反射,Model1的类型是泛型参数T1,Model2的类型是泛型参数T2?

我正在寻找可以告诉我Model1的类型映射到typeof(GenericModel<,>).GetGenericArguments()[0]

的属性或其他内容

1 个答案:

答案 0 :(得分:3)

简单:

var model1Type = typeof(GenericModel<,>).GetProperty("Model1").PropertyType;
var model2Type = typeof(GenericModel<,>).GetProperty("Model2").PropertyType;

然后model1Type.IsGenericParameter&amp;的价值model2Type.IsGenericParameter都是true,表示您已获得属性的通用参数类型。

此外,model1Type.Name == "T1"&amp; model2Type.Name == "T2"


如果您有特定的实例,例如var instance = new GenericModel<int, int>();,那么您可以执行此操作以获取属性的通用名称:

var instanceModel1TypeName =
    instance
        .GetType()
        .GetGenericTypeDefinition()
        .GetProperty("Model1")
        .PropertyType
        .Name;

// instanceModel1TypeName == "T1"