2012-11-19 9 views
40

Mam problem, gdy próbuję zmodyfikować wartość elementu, ponieważ jest to tylko pole tylko do odczytu.Jak zmodyfikować wartość KeyValuePair?

KeyValuePair<Tkey, Tvalue> 

Próbowałem różnych alternatyw, takich jak:

Dictionary<Tkey, Tvalue> 

ale mam ten sam problem. Czy istnieje sposób, aby ustawić pole wartości na nową wartość?

+0

Czy próbujesz zaktualizować określoną wartość lub wszystkie/większość wartości w słowniku? – J0HN

+0

Próbuję zaktualizować określoną wartość. – Kimbo

Odpowiedz

73

Nie możesz go zmienić, możesz go zastąpić nowym.

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

lub dla słownika:

dictionary[oldEntry.Key] = newValue; 
+0

Dzięki za pomoc. Część ze słownikiem jest dokładnie tym, czego potrzebuję. – Kimbo

8

KeyValuePair<TKey, TValue> jest niezmienny. Musisz utworzyć nowy ze zmodyfikowanym kluczem lub wartością. To, co teraz zrobisz, zależy od twojego scenariusza i co dokładnie chcesz zrobić ...

6

usłyszeć, jeśli chcesz, aby KeyValuePair zrobić zmienny.

Utwórz własną klasę.

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

dzięki czemu możemy z niego korzystać wszędzie, gdziekolwiek w KeyValuePair.

Powiązane problemy