确定属性类型是否为泛型类型参数
本文关键字:泛型类型参数 是否 类型 属性 | 更新日期: 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"