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 回答