我可以打電話Get<int>(Stat);
或Get<string>(Name);
無法隱式轉換類型「詮釋」到「T」
但是當編譯我得到:
無法隱式轉換類型「詮釋」到「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派生的,因此它不允許隱式轉換。 (如果編譯器支持它,驗證者不會,因此編譯後的程序集將無法驗證。) – JGWeissman