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