2013-11-20 62 views
0

我設置了一個字典帶有某種集合類型的值如下:C#IDictionary中有ICollection的值,而不暴露實現細節

IDictionary<string, ICollection<decimal>> goodPrices = 
    new Dictionary<string, List<decimal>>(); 

然而,這行代碼導致約不是一個編譯錯誤能夠隱式地將右側轉換到左側。顯然,下面的線不會產生錯誤:

IDictionary<string, List<decimal>> goodPrices = 
    new Dictionary<string, List<decimal>>(); 

那麼,什麼是宣稱「goodPrices」爲不暴露底層實現收集的一組串收集對的正確方法是什麼?

+2

你可以永遠做'新詞典<字符串,ICollection的>()',然後就分配'List's字典鍵,例如'goodPrices [「test」] = new List {3.30m};'... –

回答

6

這個怎麼樣:

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

啊,當然!你的答案和@ Patryk都是要走的路。我姍姍來遲發現以下SO發佈的原故,隱式轉換失敗:[鏈接](http://stackoverflow.com/questions/8734272/why-cant-dictionaryt1-listt2-be-cast-to-dictionaryt1-ienumerablet2 ) – patvarilly