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 :
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!