Erstellen Sie ein Dictionary mit LINQ und vermeiden Sie den Fehler "Item mit demselben Schlüssel wurde bereits hinzugefügt"

8

Ich möchte einen Schlüssel in einem Wörterbuch finden und den Wert ersetzen, wenn er gefunden wird, oder den Schlüssel / Wert hinzufügen, falls dies nicht der Fall ist.

Code:

%Vor%

LINQ-Lösung (throws An item with the same key has already been added. ):

%Vor%

Für jede Lösung (funktioniert):

%Vor%

Ich mochte die LINQ-Lösung sehr, aber so wie sie ist, löst sie den obigen Fehler aus. Gibt es eine nette Möglichkeit, den Fehler zu vermeiden und LINQ zu verwenden?

    
TomSelleck 20.07.2015, 15:01
quelle

1 Antwort

6

Sie können GroupBy verwenden, um eindeutige Schlüssel zu erstellen:

%Vor%

Allerdings könnten Sie anstelle von grp.First() eine Sammlung mit ToList oder ToArray erstellen. Auf diese Weise nehmen Sie bei doppelten Schlüsseln kein beliebiges Objekt.

Eine weitere Option ist die Verwendung von Lookup<TKey, TValue> , die doppelte Schlüssel und sogar nicht vorhandene Schlüssel erlaubt. In diesem Fall erhalten Sie eine leere Sequenz.

%Vor%     
Tim Schmelter 20.07.2015, 15:10
quelle

Tags und Links