Dies funktioniert, weil KeyValuePair<TKey,TValue> überschreibt nicht die Gleichheit, sondern ist ein struct. Dies bedeutet, es wird der Standard-Wert der Gleichheit. Diese einfach vergleicht die Werte der Felder-test für die Gleichheit. So müssen Sie einfach erstellen Sie eine neue KeyValuePair<TKey,TValue> Instanz mit den gleichen Feldern.
BEARBEITEN
Reagieren, um ein Kommentator, welchen Wert hat eine Erweiterung Methode hier zur Verfügung stellen?
Die variable map ist ein Dicitonary<TKey,TValue> wo TValue ist ein anonymer Typ. Die Aufzählung der Karte wird ein KeyValuePair mit der TValue werden die gleichen anonymen Typ.
Abgesehen von den paar syntax-Fehler enthalten, was Wert ist diese Erweiterung-Methode, die beabsichtigen zu bieten? entfällt die Notwendigkeit, die Angabe von generischen Argumenten zu einer Art definition, wenn dabei eine entfernen. Liste.Remove(Schlüssel,Wert) vs. Liste.Remove(new KeyValuePair<int,Zeichenfolge>(Schlüssel,Wert)). Das erstere ist sehr viel präziser. Glaube nicht, dass ein -1 ist es Wert, eine kleine syntax-Fehler Ich habe diese Antwort nach unten, weil ich nicht das Gefühl, die Verwendung einer extension-Methode eine klare, präzise Antwort oder Mehrwert, nicht durch die syntax-Fehler. In Reaktion auf den bearbeiteten Abschnitt, der Bestimmung von etwas bequemer API ist ein offensichtlicher Vorteil in der Notwendigkeit kein solches Beispiel. Während mehr bequem, wie ich argumentieren würde, dass die Signatur der Methode der Liste.Remove(string, string) ist nicht besonders Absicht enthüllt. Ich würde auch Fragen, ob die richtige Kapselung wurde durchgeführt werden, wenn die Werte wurden entfernt, die Anzahl der Orte, um eine solche Bequemlichkeit lohnt. [Fortsetzung] Das heißt, ich bin neugierig auf den zweiten Grund, den Sie zur Verfügung gestellt wurde, um Platz für anonyme Typen. Können Sie ein Beispiel geben, wie ein KeyValuePair<TKey, TValue> würde deklariert werden, mit einem anonymen Typ, der entweder für den Schlüssel oder Wert? Ich habe noch nie so ein Bedürfnis oder gesehen, die diese Technik verwendet, aber wenn möglich kann ich auf jeden Fall einen Vorteil bei der Bereitstellung solcher eine Abstraktion.
Hier sind ein paar Beispiele für das entfernen eines Elements aus einer Liste von KeyValuePair:
//Remove the first occurrence where you have key and value
items.Remove(newKeyValuePair<int,int>(0,0));//Remove the first occurrence where you have only the key
items.Remove(items.First(item => item.Key.Equals(0)));//Remove all occurrences where you have the key
items.RemoveAll(item => item.Key.Equals(0));
BEARBEITEN
//Remove the first occurrence where you have the item
items.Remove(items[0]);
Entfernen Sie alle Elemente in der Liste von Schlüssel:
myList.RemoveAll(x => x.Key.Equals(keyToRemove));
Trotz der nicht der besten erklärte Antwort, so wird dies in den meisten Fällen wirklich den trick tun, wenn Sie den Wert der Schlüssel, mit zu arbeiten.
Müssen Sie um eine Referenz auf das Objekt, das Sie entfernen möchten, deshalb fand ich den Artikel, den ich bin auf der Suche nach und der Zuweisung zu einem KeyValuePair - da sagen Sie, es zu entfernen, die einem bestimmten Element.
Eine bessere Lösung könnte sein, verwenden Sie ein Wörterbuch:
Dictionary<string,string> d =newDictionary<string,string>();if(d.ContainsKey("somekey")) d.Remove("somekey");
Diese können Sie entfernen, indem Sie den Wert des Schlüssels statt, die Auseinandersetzung mit der Liste nicht indiziert, indem Sie die-Taste.
Bearbeiten können Sie nicht haben, um ein KeyValuePair Referenz. Noch ein Wörterbuch ist wahrscheinlich der bessere Weg zu gehen.
Wenn Sie sowohl den Schlüssel als auch den Wert können Sie Folgendes tun
Dies funktioniert, weil
KeyValuePair<TKey,TValue>
überschreibt nicht die Gleichheit, sondern ist ein struct. Dies bedeutet, es wird der Standard-Wert der Gleichheit. Diese einfach vergleicht die Werte der Felder-test für die Gleichheit. So müssen Sie einfach erstellen Sie eine neueKeyValuePair<TKey,TValue>
Instanz mit den gleichen Feldern.BEARBEITEN
Reagieren, um ein Kommentator, welchen Wert hat eine Erweiterung Methode hier zur Verfügung stellen?
Begründung ist am besten in code.
Auch in dem Fall, wo entweder der Schlüssel oder Wert-Typ ist ein anonymer Typ, eine Erweiterung-Methode ist erforderlich.
EDIT2
Hier ist ein Beispiel, wie man KeyValuePair, wo einer von den 2 hat ein anonymer Typ.
Die variable map ist ein
Dicitonary<TKey,TValue>
woTValue
ist ein anonymer Typ. Die Aufzählung der Karte wird ein KeyValuePair mit derTValue
werden die gleichen anonymen Typ.entfällt die Notwendigkeit, die Angabe von generischen Argumenten zu einer Art definition, wenn dabei eine entfernen. Liste.Remove(Schlüssel,Wert) vs. Liste.Remove(new KeyValuePair<int,Zeichenfolge>(Schlüssel,Wert)). Das erstere ist sehr viel präziser. Glaube nicht, dass ein -1 ist es Wert, eine kleine syntax-Fehler
Ich habe diese Antwort nach unten, weil ich nicht das Gefühl, die Verwendung einer extension-Methode eine klare, präzise Antwort oder Mehrwert, nicht durch die syntax-Fehler.
In Reaktion auf den bearbeiteten Abschnitt, der Bestimmung von etwas bequemer API ist ein offensichtlicher Vorteil in der Notwendigkeit kein solches Beispiel. Während mehr bequem, wie ich argumentieren würde, dass die Signatur der Methode der Liste.Remove(string, string) ist nicht besonders Absicht enthüllt. Ich würde auch Fragen, ob die richtige Kapselung wurde durchgeführt werden, wenn die Werte wurden entfernt, die Anzahl der Orte, um eine solche Bequemlichkeit lohnt. [Fortsetzung]
Das heißt, ich bin neugierig auf den zweiten Grund, den Sie zur Verfügung gestellt wurde, um Platz für anonyme Typen. Können Sie ein Beispiel geben, wie ein KeyValuePair<TKey, TValue> würde deklariert werden, mit einem anonymen Typ, der entweder für den Schlüssel oder Wert? Ich habe noch nie so ein Bedürfnis oder gesehen, die diese Technik verwendet, aber wenn möglich kann ich auf jeden Fall einen Vorteil bei der Bereitstellung solcher eine Abstraktion.
InformationsquelleAutor JaredPar
Hier sind ein paar Beispiele für das entfernen eines Elements aus einer Liste von KeyValuePair:
BEARBEITEN
InformationsquelleAutor Derek Greer
Sollte in der Lage sein zu verwenden .Remove(), .RemoveAt(), oder eine der anderen Methoden.
InformationsquelleAutor cloggins
Entfernen Sie alle Elemente in der Liste von Schlüssel:
InformationsquelleAutor Jamie Ide
oder
Müssen Sie um eine Referenz auf das Objekt, das Sie entfernen möchten, deshalb fand ich den Artikel, den ich bin auf der Suche nach und der Zuweisung zu einem KeyValuePair - da sagen Sie, es zu entfernen, die einem bestimmten Element.
Eine bessere Lösung könnte sein, verwenden Sie ein Wörterbuch:
Diese können Sie entfernen, indem Sie den Wert des Schlüssels statt, die Auseinandersetzung mit der Liste nicht indiziert, indem Sie die-Taste.
Bearbeiten können Sie nicht haben, um ein KeyValuePair Referenz. Noch ein Wörterbuch ist wahrscheinlich der bessere Weg zu gehen.
InformationsquelleAutor 3Dave