我正在構建密鑰類型爲KeyValuePair
的Dictionary
。當使用KeyValuePair.Create
內Dictionary
初始化它不需要模板類型並正確推斷的類型,下面正確編譯,甚至沒有一個警告:字典初始值設定項內的KeyValuePair類型推斷
private static readonly IDictionary<KeyValuePair<Market, MarketData>, string> channelDict =
new Dictionary<KeyValuePair<Market, MarketData>, string> {
{ KeyValuePair.Create(Market.USD, MarketData.Trade), "trades" },
...
};
現在代碼進行了重組,類型Market
和MarketData
被移到單獨的項目和命名空間,命名空間是由using
語句在文件的頂部導入,但現在同樣的代碼將無法編譯,它拋出這個錯誤:
error CS0305: Using the generic type 'KeyValuePair<TKey, TValue>' requires 2 type arguments
我可以肯定的是using
名步伐正確導入,因爲簡單的添加private Market _m;
沒有產生任何錯誤,更重要的是,在字典中的定義:
private static readonly IDictionary<KeyValuePair<Market, MarketData>, string> channelDict =
new Dictionary<KeyValuePair<Market, MarketData>, string>
沒有產生錯誤都不是,它是Create
方法不能編譯:
KeyValuePair.Create(Market.USD, MarketData.Trade)
那麼爲什麼它不能現在推斷類型參數是否在另一個命名空間,而它可以之前?
看起來你已經聲明字典是接受'IDictionary',然後試圖創建一個實際上不同的KeyValuePair:'KeyValuePair.Create(Market.USD,MarketData.Trade)'' 。市場與Market.USD類型不同,MarketDate與MarketData類型不同。類型與MarketData.Trade –
ainwood
不一樣,市場是一個枚舉,Market.USD是這個枚舉的值。 – fluter
考慮[Tuple](https://msdn.microsoft.com/en-us/library/system.tuple(v = vs.110).aspx)而不是'KeyValuePair'? –