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
Mary-Kate Olsenoriginal
2025-01-05 19:39:45554parcourir

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

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

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);
}

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!

Déclaration:
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