95 votes

Comment modifier une valeur KeyValuePair ?

J'ai un problème lorsque j'essaie de modifier la valeur d'un élément parce que c'est un champ en lecture seule.

KeyValuePair<Tkey, Tvalue>

J'ai essayé différentes alternatives comme :

Dictionary<Tkey, Tvalue>

mais là, j'ai le même problème. Existe-t-il un moyen de définir le champ de valeur sur une nouvelle valeur ?

146voto

deerchao Points 5517

Vous ne pouvez pas le modifier, vous pouvez le remplacer par un nouveau.

var newEntry = new KeyValuePair<TKey, TValue>(oldEntry.Key, newValue);

ou pour le dictionnaire :

dictionary[oldEntry.Key] = newValue;

19voto

maulin shah Points 201

Ici, si vous voulez rendre KeyValuePair mutable.

Créez une classe personnalisée.

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

afin que nous puissions l'utiliser n'importe où dans KeyValuePair.

9voto

thecoop Points 23695

KeyValuePair<TKey, TValue> est immuable. Vous devez en créer un nouveau avec la clé ou la valeur modifiée. Ce que vous faites ensuite dépend de votre scénario, et de ce que vous voulez faire exactement...

1voto

Sunny656 Points 109

KeyValuePair est immuable,

namespace System.Collections.Generic
{
  [Serializable]
  public struct KeyValuePair<TKey, TValue>
  {
    public KeyValuePair(TKey key, TValue value);
    public TKey Key { get; }
    public TValue Value { get; }
    public override string ToString();
  }
}

Si vous avez une valeur existante dans KeyValuePair que vous voulez mettre à jour, vous pouvez essayer de supprimer la valeur existante et ensuite ajouter la valeur modifiée.

Par exemple :

var list = new List<KeyValuePair<string, int>>();
list.Add(new KeyValuePair<string, int>("Cat", 1));
list.Add(new KeyValuePair<string, int>("Dog", 2));
list.Add(new KeyValuePair<string, int>("Rabbit", 4));

int removalStatus = list.RemoveAll(x => x.Key == "Rabbit");

if (removalStatus == 1)
{
    list.Add(new KeyValuePair<string, int>("Rabbit", 5));
}

0voto

40-Love Points 1333

Vous ne pouvez pas modifier une KeyValuePair, mais vous pouvez modifier les valeurs de votre dictionnaire comme ceci :

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

ou comme ça :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X