2013-07-16 2 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.Except (б) .ToList

Смежные вопросы