说你有班级:
public class GenericModel<T1, T2>
{
public T1 Model1 { get; set; }
public T2 Model2 { get; set; }
}
如何判断使用反射,Model1的类型是泛型参数T1,Model2的类型是泛型参数T2?
我正在寻找可以告诉我Model1的类型映射到typeof(GenericModel<,>).GetGenericArguments()[0]
答案 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"