2014-03-28 49 views
0

當我嘗試在Select中將一種字典類型轉換爲另一種字典類型時,我得到'無法轉換'WhereSelectEnumerableIterator'類型的對象'。我沒有看到任何明顯的原因。請幫忙。爲什麼我無法爲以下代碼轉換類型爲'WhereSelectEnumerableIterator的對象?

void Main() 
{ 
    Dictionary<string,Dictionary<string,string>> test = new Dictionary<string,Dictionary<string,string>>(); 
    Dictionary<string,string> inner = new Dictionary<string,string>(); 

    for(int n = 0; n< 10; n++) 
    { 
     var data = n.ToString(); 
     inner[data] = data; 
    } 

    for(int n2 = 0; n2 < 10; n2++) 
    { 
     test[Guid.NewGuid().ToString()] = inner; 
    } 


    // test conversion 
    var output = (Dictionary<Guid,Dictionary<string,string>>) test.Select(x => new KeyValuePair<Guid, Dictionary<string,string>>(new Guid(x.Key), x.Value)); 
} 

回答

3

您有IEnumerable<Guid,Dictionary<string,string>>。你顯然想要一個Dictionary<Guid,Dictionary<string,string>>。當您嘗試將其中一個指派給另一個時,會出現編譯時錯誤,告訴您IEnumerable不是Dictionary,它只是一個IEnumerable。你提供了一個演員陣容,這是一種說法,「對不起,編譯器,但你錯了,我知道比你更好;這IEnumerable實際上是一個字典,在引擎蓋下。」可悲的是,這不是這種情況。你實際上沒有Dictionary,你有WhereSelectEnumerableIterator,這不是Dictionary

還有你必須創建一個字典,其中之一是使用ToDictionary的任何數量的方法:

var output = test.ToDictionary(x => new Guid(x.Key), x => x.Value); 

在一個不相關的音符,你已經創建只有一個內部字典,並將其設置爲您創建的每個鍵的價值。你可能會覺得你已經複製了這本詞典10次。你還沒有。只有有一個Dictionary<string, string>這裏;你只有10個不同的GUID都指向那個字典。如果你想讓這些鍵實際指向不同的字典,你需要創建一堆不同的字典。

+0

其實他試圖得到一個Dictionary >的實例。 –

+0

@UfukHacıoğulları是的。這正是這樣產生的。 – Servy

相關問題