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

本文关键字:泛型类型参数 是否 类型 属性 | 更新日期: 2023-09-27 18:09:08

假设你有一个类:

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

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

我正在寻找一个属性或其他东西来告诉我Model1的类型映射到typeof(GenericModel<,>).GetGenericArguments()[0]

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

Simple:

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

model1Type.IsGenericParameter &model2Type.IsGenericParameter都将是true,表明您已经获得了属性的通用参数类型。

Also, model1Type.Name == "T1" &model2Type.Name == "T2" .


如果您有一个特定的实例,例如var instance = new GenericModel<int, int>();,那么您可以这样做以获得属性的通用名称:

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