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

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

DDD
Libérer: 2025-01-01 06:57:13
original
479 Les gens l'ont consulté

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

Changer la valeur d'un élément dans une liste de structures

En programmation, la manipulation des structures de données est une tâche courante. Lorsqu'il s'agit de listes de structures, un problème spécifique peut survenir lors de la tentative de modification de la valeur d'un élément individuel. Cet article explore la raison sous-jacente de ce problème et propose une solution potentielle.

Lorsque vous travaillez avec des types de valeur tels que des structures, chaque variable ou référence de type valeur représente une instance distincte de la structure. L'attribution d'une valeur d'un élément de liste à une nouvelle variable, telle que Struct obItem = MyList[1];, crée une nouvelle instance avec des membres copiés. Toute modification apportée à obItem n'affectera pas l'élément d'origine dans MyList.

Ce comportement découle de la sémantique des types valeur. Lors de l'attribution d'un type de valeur à une nouvelle variable ou de sa transmission comme argument, une nouvelle instance est créée et les valeurs sont copiées. Cela contraste avec les types de référence tels que les classes, où les modifications apportées à une référence affecteront l'objet d'origine.

Pour résoudre le problème de la modification d'éléments individuels dans une liste de structures, une approche consiste à définir une interface qui la structure implémente et utilise cette interface pour accéder à la structure. Cela permet de modifier la structure réelle via une référence d'interface, qui pointe vers l'objet encadré.

L'extrait de code suivant illustre cette technique :

public interface IMyStructModifier
{
    string Name { set; }
}

public struct MyStruct : IMyStructModifier
{
    public string Name { get; set; }
}

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

MyStruct temp = (MyStruct)obList[1];
temp.Name = "Gishu";

foreach (MyStruct s in obList) // "ABC", "DEF"
{
    Console.WriteLine(s.Name);
}

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

Cette méthode permet de modifier la structure d'origine dans la liste via la référence de l'interface.

Il est important de considérer les compromis entre l'utilisation de structures et de classes pour le stockage dans des collections. Les structures offrent des avantages en termes de performances et sont préférées lorsque l'immuabilité ou une faible empreinte mémoire sont souhaitées. Cependant, si la modification d'éléments dans une liste est obligatoire, les classes peuvent être une option plus appropriée.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal