具有ICollection值的C#IDictionary,不公开实现细节

具有ICollection值的C#IDictionary,不公开实现细节,c#,generics,collections,covariance,C#,Generics,Collections,Covariance,我正在使用某种集合类型的值设置一个字典,如下所示: IDictionary<string, ICollection<decimal>> goodPrices = new Dictionary<string, List<decimal>>(); i词典商品价格= 新字典(); 但是,这行代码导致编译错误,即无法将右侧隐式转换为左侧。显然,以下行不会产生错误: IDictionary<string, List<decimal&

我正在使用某种集合类型的值设置一个字典,如下所示:

IDictionary<string, ICollection<decimal>> goodPrices = 
    new Dictionary<string, List<decimal>>();
i词典商品价格=
新字典();
但是,这行代码导致编译错误,即无法将右侧隐式转换为左侧。显然,以下行不会产生错误:

IDictionary<string, List<decimal>> goodPrices = 
    new Dictionary<string, List<decimal>>();
i词典商品价格=
新字典();
那么,在不公开集合的底层实现的情况下,将“goodPrices”声明为一组字符串集合对的正确方法是什么呢

IDictionary<string, ICollection<decimal>> goodPrices = new Dictionary<string, ICollection<decimal>>();
goodPrices.Add("myString", new List<decimal>() { /* my values */ });
IDictionary goodPrices=new Dictionary();
Add(“myString”,newlist(){/*myvalues*/});
这个怎么办:

IDictionary<string, ICollection<decimal>> goodPrices = new Dictionary<string, ICollection<decimal>>();
goodPrices.Add("myString", new List<decimal>() { /* my values */ });
IDictionary goodPrices=new Dictionary();
Add(“myString”,newlist(){/*myvalues*/});

您可以始终执行
newdictionary()
操作,然后将
List
s分配给字典键,例如
goodPrices[“test”]=newlist{3.30m}
…您可以始终执行
newdictionary()
,然后将
List
s分配给字典键,例如
goodPrices[“test”]=newlist{3.30m}…啊,当然!你的答案和@Patryk的答案都是正确的选择。我后来发现了以下关于隐式转换失败的根本原因的帖子:啊,当然!你的答案和@Patryk的答案都是正确的选择。我后来发现了以下关于隐式转换失败的根本原因的帖子: