2

私は2つの辞書を持っています:

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]'

匿名変数を使用すると、すべて正常に機能しますが、厳密に型指定する必要があります。

私が間違っていることのアイデアはありますか?

前もって感謝します!

ps: その例外については、keyValuPair に関連するものでなければならないと推測していますが、解決する方法が見つかりませんでした。

4

2 に答える 2

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
于 2013-07-16T21:12:27.327 に答える
0

これで修正されるはずです - 式の最後に ToList を追加してください。

a = a.Except(b).ToList

于 2016-04-13T14:05:05.060 に答える