【发布时间】:2011-12-23 19:36:32
【问题描述】:
此代码无法编译:
public T Get<T>()
{
T result = default(T);
if(typeof(T) == typeof(int))
{
int i = 0;
result = (T)i;
}
return result;
}
但是,这段代码可以编译:
public T Get<T>()
{
T result = default(T);
if(typeof(T) == typeof(int))
{
int i = 0;
result = (T)(object)i;
}
return result;
}
代码也可以正常工作。我不明白为什么编译器可以将对象(实际类型可以是任何类型)转换为 T,但不能将 int(从对象继承)转换为 T。
【问题讨论】:
-
你能看到 int i 是 int 类型和 (T)(Object)i 类型的区别吗?你可能想看看什么是装箱和拆箱隐式转换与显式转换,这看起来像什么