2010-10-04 97 views
1

我在下面的代碼中得到了「不能從'int'轉換爲'TValue'」。我怎樣才能解決這個問題?我明白爲什麼會有這個問題,但我很好奇這個問題的最佳解決方法。我是否需要決定是否使用特定的ReturnValuesDict類型,而不是將其保留爲泛型?C# - 代碼有什麼問題(泛型,靜態方法等)

​​
+0

0從哪裏來?你想達到什麼目的?編輯:我想我想說的是,「究竟是_empty_應該是什麼意思?」 – Cameron 2010-10-04 04:18:29

+0

你的問題是你的方法返回一個泛型集合(tkey,tvalue),但是你試圖添加一個0(int)的TValue,這首先打敗了使用泛型的目的。 :) @阿尼的答案是要走的路。 – RPM1984 2010-10-04 04:27:58

回答

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