【发布时间】:2011-12-31 13:36:49
【问题描述】:
我可以拨打Get<int>(Stat);或Get<string>(Name);
但是编译时我得到:
无法将类型“int”隐式转换为“T”
string 也是如此。
public T Get<T>(Stats type) where T : IConvertible
{
if (typeof(T) == typeof(int))
{
int t = Convert.ToInt16(PlayerStats[type]);
return t;
}
if (typeof(T) == typeof(string))
{
string t = PlayerStats[type].ToString();
return t;
}
}
【问题讨论】:
-
你可能认为 if 块检查了 T 是 int,所以在块内,你知道 T 是 int,你应该能够将 int 隐式转换为 T。但是编译器不是设计的按照这个推理,它只知道通常 T 不是从 int 派生的,因此它不允许隐式转换。 (如果编译器支持它,验证器不会,因此编译的程序集将无法验证。)