【发布时间】:2019-07-16 13:41:30
【问题描述】:
假设我们有通用方法:
public void GenericMethod<T>(T item)
{
var typeOf = typeof(T);
var getType = item.GetType();
}
我们使用以下参数调用它:
GenericMethod(1)
GenericMethod((object) 1)
结果是:
typeOf = System.Int32
getType = System.Int32
和
typeOf = System.Object
getType = System.Int32
谁能解释一下为什么 typeof 整数转换为对象返回 System.Object,但 .GetType() 返回 System.Int32?
【问题讨论】:
-
typeof takes类型名称(您在编译时指定),GetType获取实例的运行时类型。 -
另外,如果您发现自己在泛型中进行任何类型的测试,请问问自己是否为这项工作选择了正确的工具。因为这可能意味着您无法在 runtime 正常工作,而您在编译时“承诺”您可以做的事情(通过说您可以为任何类型工作,受该类型的任何泛型类型约束参数)