2013-07-16 115 views
2

我有兩個字典:(LINQ)字典:除了不返回字典

Dim a As Dictionary(Of String, Type) 
Dim b As Dictionary(Of String, Type) 

我需要的是在a不在b應該是這樣的:

a = a.Except(b) 

但它給我一個例外:

Unable to cast object of type 
    '<ExceptIterator>d__99`1[System.Collections.Generic.KeyValuePair`2[System.String,System.Type]]' 
to type 
    'System.Collections.Generic.Dictionary`2[System.String,System.Type]' 

如果我使用匿名變量它一切正常,但我需要它是強類型。

任何想法我做錯了什麼?

在此先感謝!

p.s .:對於這個例外,我猜它必須是與keyValuPair相關的東西,但我還沒有找到解決的辦法。

回答

4

你是對的Except返回IEnumerable(Of KeyValuePair(Of String, Type))。你可以解決這個問題通過調用ToDictionary擴展方法:

a = a.Except(b) _ 
    .ToDictionary(Function(x) x.Key, Function(x) x.Value) 

但是,這可能會更好,因爲它不涉及創建一個新的字典:

For Each x in a.Intersect(b) 
    a.Remove(x.Key) 
Next 
+0

我試圖說,但由於某些原因,當我'x.'這不是讓我用'Key' – Luis

+0

@Luis這絕對* *應工作。我自己測試它只是爲了確保。 –

+0

嗯,我關閉VS,重新打開它,重建並...它的工作...謝謝 – Luis

0

這應該修復它 - 添加一個ToList在你的表達式結尾。

A = a.Except(B).ToList