我正在构建密钥类型为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'? –