我创建了以下通用方法,我想知道TypeName ,它总是以对象数组的形式出现。
public static string ToJson<T>(this T entity)
{
Type type = entity.GetType();
return type.FullName; // or type.Name
}
因此,如果我传递一个类Employee的实例,它将返回Object或Object数组。
我的电话就像
Employee emp = new Employee();
emp.ToJson();
调试时我正在获取System.Object或Object of Object,但它永远不是对象或对象的数组,它始终是某个类的实例。
答案 0 :(得分:1)
typeName
为object[]
,因为entity
为object[]
。还有什么其他原因?
如果您的代码如下,则会出现一个更有趣的问题:
public static string MyToJson<T>(this T entity)
{
var type = typeof(T);
return type.FullName;
}
错误......这不是一样的,毕竟T
的类型和entity
的类型是相同的,对吧?不,完全没有:
MyToJson((object)1); //will return System.Object
ToJson((object)1); //will return System.Int32
T
通过类型推断在编译时解决,编译器在该精确时刻获得的信息;参数entity
是类型化对象,因此T
被推断为object
。在您的代码中,您正在查询 runtime 中参数的类型,因此返回运行时类型,恰好是int
。