Maison > développement back-end > C++ > Comment puis-je modifier des éléments dans une liste de structures C# ?

Comment puis-je modifier des éléments dans une liste de structures C# ?

Mary-Kate Olsen
Libérer: 2025-01-05 19:39:45
original
500 Les gens l'ont consulté

How Can I Modify Elements in a C# List of Structs?

Modification d'éléments dans une liste de structures

En C#, les structures sont des types valeur, ce qui signifie que chaque instance contient sa propre copie de données. Ce comportement diffère des classes, où les références pointent vers le même objet sous-jacent. Lorsque vous travaillez avec des listes de structures, il est important de comprendre la sémantique de ces types de valeur.

Considérez le code suivant :

List<MyStruct> MyList = new List<MyStruct>();
MyList.Add(new MyStruct("john"));
MyList.Add(new MyStruct("peter"));

MyList[1].Name = "bob"; // Attempt to modify an element
Copier après la connexion

Ce code déclenchera une erreur, indiquant que la valeur de retour de MyList [int] ne peut pas être modifié puisque ce n'est pas une variable. Cette erreur provient du fait que les types de valeur sont copiés lors de l'affectation.

Struct obItem = MyList[1]; // Creates a new instance of MyStruct
obItem.Name = "Gishu"; // Modifies the new instance
Copier après la connexion

Ici, obItem est une nouvelle instance de MyStruct avec une copie des données de MyList[1]. Toute modification apportée à obItem n'affecte pas l'élément d'origine dans la liste.

Solution :

Si vous devez modifier des éléments dans une liste de structures, tenez compte des éléments suivants options :

  1. Utilisez plutôt une classe : Les classes sont des types de référence, permettant de modifier l'objet sous-jacent pour se propager dans tout le code.
  2. Exposer une interface : Les structures peuvent implémenter des interfaces, vous permettant de modifier la structure réelle via une référence d'interface. Cette approche introduit la boxe, qui doit être utilisée avec prudence.

Voici un exemple utilisant une interface :

public interface IMyStructModifier
{
    String Name { set; }
}
public struct MyStruct : IMyStructModifier ...

List<Object> obList = new List<Object>();
obList.Add(new MyStruct("ABC"));
obList.Add(new MyStruct("DEF"));

IMyStructModifier temp2 = obList[1] as IMyStructModifier;
temp2.Name = "Now Gishu";

foreach (MyStruct s in obList) // => "ABC", "Now Gishu"
{
    Console.WriteLine(s.Name);
}
Copier après la connexion

Conclusion :

Alors que les listes de classes offrent une plus grande flexibilité pour modifier des éléments, les structures peuvent être utiles lorsque la sémantique des valeurs est souhaitable. En comprenant la nature des types de valeur et en explorant des solutions alternatives, vous pouvez travailler efficacement avec des listes de structures en C#.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal