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 ?

0voto

Ondrej Rozinek Points 47

En KeyValuePair<TKey, TValue> est un struct et le struct en C# est un type de valeur et est mentionné comme étant immuable. La raison est évidente, le Dictionary<TKey,TValue> doit être une structure de données performante. L'utilisation d'un type de référence au lieu d'un type de valeur entraînerait une surcharge de mémoire trop importante. Contrairement à un type de valeur directement stocké dans un dictionnaire, les références 32 ou 64 bits pour chaque entrée du dictionnaire seraient en outre allouées. Ces références seraient dirigées vers le tas pour l'instance de l'entrée. Les performances globales seraient rapidement réduites.

Les règles de Microsoft pour choisir struct plutôt que class qui Dictionary<TKey,TValue> satisfait :

CONSIDÉREZ définir une structure au lieu d'une classe si les instances du type sont petites et généralement de courte durée ou si elles sont couramment intégrées à d'autres objets.

ÉVITEZ de définir une structure à moins que le type ne possède toutes les caractéristiques suivantes :

  • Il représente logiquement une seule valeur, comme les types primitifs (int, double, etc.).
  • Il a une taille d'instance inférieure à 16 octets.
  • Il est immuable.
  • Elle ne devra pas être mise en boîte fréquemment.

0voto

Adarsh Babu PR Points 107
Dictionary<long, int> _rowItems = new Dictionary<long, int>();
  _rowItems.Where(x => x.Value > 1).ToList().ForEach(x => { _rowItems[x.Key] = x.Value - 1; });

Pour le dictionnaire, nous pouvons mettre à jour les valeurs de cette manière en fonction de certaines conditions.

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