我在下面的代碼中得到了「不能從'int'轉換爲'TValue'」。我怎樣才能解決這個問題?我明白爲什麼會有這個問題,但我很好奇這個問題的最佳解決方法。我是否需要決定是否使用特定的ReturnValuesDict類型,而不是將其保留爲泛型?C# - 代碼有什麼問題(泛型,靜態方法等)
1
A
回答
12
此不編譯的原因是0(一個int
)不能,在一般情況下,被轉換到詞典中值類型(TValue
),其儘可能編譯器而言,是一些任意類型。 (where TValue : int
將無法正常工作,但這是另一回事)
我假設您正在嘗試使用與原始鍵相同的鍵構建字典,但使用「空」值?
如果您沒有問題.NET認爲是一種類型的「默認」值的東西,你可以嘗試轉產到:
newItem.Add(curr.Key, default(TValue));
這將使用字典值的default-value類型。例如:參考類型爲null
,數值類型爲零。
如果,另一方面,其意圖是編寫只具有int
值dictionarys奏效的方法,你可以把更多的限制(的地方這在其他類):
public static ReturnValuesDict<TKey, int> CreateEmptyClone<TKey>(ReturnValuesDict<TKey, int> current)
{
var newItem = new ReturnValuesDict<TKey, int>();
foreach (var curr in current)
{
newItem.Add(curr.Key, 0);
}
return newItem;
}
注意該方法現在是採用無約束泛型TKey
參數的泛型方法。
+0
或者如果他願意,他可以使用'null'而不是0(我認爲這是他的意圖),只要'TValue'是引用類型。他可以使用where語句來說明。 – Nayan 2010-10-04 05:50:50
相關問題
- 1. 泛型方法:靜態與非靜態
- 2. 靜態方法的泛型
- 3. 泛型和靜態方法
- 4. 爲什麼C#無法從非泛型靜態方法的簽名推斷泛型類型參數類型?
- 5. 好奇的問題,涉及到泛型和靜態方法
- 6. 靜態方法中的泛型類型
- 7. 訪問靜態方法在泛型類在C#
- 8. (Java)靜態通用方法與泛型類靜態方法
- 9. 爲什麼java的允許靜態泛型方法
- 10. 代碼有什麼問題?
- 11. C#泛型方法中的Casting問題
- 12. 在C#中測試私有靜態泛型方法
- 13. 這個C代碼有什麼問題?
- 14. 以下C代碼有什麼問題
- 15. 這個c + +代碼有什麼問題
- 16. 我的C++代碼有什麼問題?
- 17. 這個C代碼有什麼問題?
- 18. 我的C#代碼有什麼問題?
- 19. 以下C代碼有什麼問題?
- 20. 這個C++代碼有什麼問題
- 21. 這個c代碼有什麼問題?
- 22. 這個C代碼有什麼問題
- 23. 這段C++代碼有什麼問題?
- 24. 這短C代碼有什麼問題
- 25. 這個C代碼有什麼問題?
- 26. 我的代碼有什麼問題? C++
- 27. 這個C++代碼有什麼問題?
- 28. 我的代碼有什麼問題? C
- 29. 這段C++代碼有什麼問題?
- 30. 這個C#代碼有什麼問題?
0從哪裏來?你想達到什麼目的?編輯:我想我想說的是,「究竟是_empty_應該是什麼意思?」 – Cameron 2010-10-04 04:18:29
你的問題是你的方法返回一個泛型集合(tkey,tvalue),但是你試圖添加一個0(int)的TValue,這首先打敗了使用泛型的目的。 :) @阿尼的答案是要走的路。 – RPM1984 2010-10-04 04:27:58