"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je modifier les éléments individuels dans une liste de structures en C #?

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

Publié le 2025-03-24
Parcourir:996

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

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

dans la programmation, la manipulation des structures de données est une tâche commune. Lorsque vous traitez des 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 fournit une solution potentielle.

Lorsque vous travaillez avec des types de valeur tels que les structures, chaque variable de valeur ou référence 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. Toutes les modifications apportées à Obitem n'affecteront pas l'élément d'origine de MyList.

Ce comportement découle de la sémantique des types de valeur. Lorsque vous attribuez un type de valeur à une nouvelle variable ou en le faisant passer comme un argument, une nouvelle instance est créée et les valeurs sont copiées. Ceci contraste avec des types de référence tels que les classes, où les modifications à une référence affecteront l'objet d'origine.

pour résoudre le problème de la modification des éléments individuels dans une liste de structures, une approche consiste à définir une interface que 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 en boîte.

Le code d'extrait de code suivant démontre cette technique:

public interface IMyStructModifier
{
    string Name { set; }
}

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

List obList = new List();
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);
}

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

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

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3