web-dev-qa-db-de.com

Wie kann ich einen KeyValuePair-Wert ändern?

Ich habe ein Problem, wenn ich versuche, den Wert eines Elements zu ändern, da es nur ein schreibgeschütztes Feld ist.

KeyValuePair<Tkey, Tvalue>

Ich habe verschiedene Alternativen ausprobiert:

Dictionary<Tkey, Tvalue>

aber da habe ich das gleiche problem. Gibt es eine Möglichkeit, das Wertefeld auf einen neuen Wert zu setzen?

54
Kimbo

Sie können es nicht ändern, Sie können es durch ein neues ersetzen.

var newEntry = new KeyValuePair<Tkey, Tvalue>(oldEntry.Key, newValue);

oder für Wörterbuch:

dictionary[oldEntry.Key] = newValue;
93
deerchao

Hier, wenn Sie KeyValuePair veränderbar machen möchten.

Erstellen Sie eine benutzerdefinierte Klasse.

public class KeyVal<Key, Val>
{
    public Key Id { get; set; }
    public Val Text { get; set; }

    public KeyVal() { }

    public KeyVal(Key key, Val val)
    {
        this.Id = key;
        this.Text = val;
    }
}

so können wir es überall in KeyValuePair verwenden.

8
maulin shah

KeyValuePair<TKey, TValue> ist unveränderlich. Sie müssen einen neuen mit dem geänderten Schlüssel oder Wert erstellen. Was Sie als Nächstes tun, hängt von Ihrem Szenario ab und davon, was Sie genau tun möchten.

8
thecoop

Sie können ein KeyValuePair nicht ändern, aber Sie können Ihre Wörterbuchwerte folgendermaßen ändern:

foreach (KeyValuePair<String, int> entry in dict.ToList())
{
    dict[entry.Key] = entry.Value + 1;
}

oder so:

foreach (String entry in dict.Keys.ToList())
{
    dict[entry] = dict[entry] + 1;
};
0
live-love