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?
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;
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.
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.
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;
};