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

Comment modifier des éléments dans une liste de structures en C# ?

Barbara Streisand
Libérer: 2025-01-01 04:49:10
original
375 Les gens l'ont consulté

How to Modify Elements in a List of Structs in C#?

Modification d'éléments dans des listes de structures

Problème :

Lorsque vous essayez de modifier un élément dans une liste de structures à l'aide l'opérateur d'index de tableau (par exemple, MyList[1].Name = "bob"), une erreur se produit : "Impossible de modifier le valeur de retour de 'System.Collections.Generic.List.this[int]' car ce n'est pas une variable."

Explication :

Cette erreur est due à la sémantique du type valeur des structures. Les structures sont copiées par valeur, ce qui signifie que lorsqu'on accède à un élément à partir d'une liste de structures, une nouvelle instance est créée et les valeurs sont copiées. Par conséquent, la modification de cette nouvelle instance n'affecte pas l'élément d'origine dans la liste.

Solution :

Envisagez plutôt d'utiliser des classes :

Si le besoin de modifier des éléments dans une liste est critique, envisagez d'utiliser des classes au lieu de structures. Les classes sont des types référence, ce qui signifie qu’elles sont transmises par référence plutôt que par valeur. La modification d'un élément dans une liste de classes affectera directement l'instance d'origine.

Exposer une interface :

Si des structures sont requises, une solution consiste à exposer une interface sur le structurer. Cela permet d'effectuer des modifications via la référence de l'interface, qui pointe vers l'objet encadré.

public interface IMyStructModifier
{
    String Name { set; }
}

public struct MyStruct : IMyStructModifier ...
Copier après la connexion

Exemple :

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

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

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

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