说我有这样的课程:
public class TestClass <T>
{
public T Prop { get; set; }
}
我试图确定属性类型是T
,而不是传递的实际类型,例如int
为了澄清一点:
TestClass<int> tc=new TestClass<int>();
tc.GetType().GetProperty("prop").PropertyType.Name; //this returns int, but I need "T"
答案 0 :(得分:5)
当您创建<a data-featherlight={ `string${this.props.data.imageUrl}` }>
实例时,您有一个具体的通用类型 - 属性 select pc.categoryName, pc.Short_Desc, CAST(pc.categoryImage as Varbinary),
COUNT(p.categoryCodeId)as Total from tbl_product as p,
tbl_productCategory as pc where p.categoryCodeId=pc.categoryCodeId
group by p.categoryCodeId, pc.categoryName,pc.Short_Desc,
CAST(pc.categoryImage as Varbinary) order by pc.categoryName
,而不是TestClass<int>
。
要获得实际的通用类型,您可以使用int
:
T
如果您想区分实际类型和泛型类型参数,可以使用GetGenericTypeDefinition
:
var genericType = tc.GetType().GetGenericTypeDefinition();
var typeName = genericType.GetProperty("Prop").PropertyType.Name;
答案 1 :(得分:3)
请注意,如果您正在使用C#6,并且在其定义类中需要泛型类型参数的名称,则可以在不使用反射的情况下离开:
var name = nameof(T); // "T"
如果您需要在其类之外使用泛型类型参数的名称,则需要使用反射(请参阅Luaan's answer。)