構造体のリスト内の要素を変更する
C# では、構造体は値型であり、各インスタンスがデータの独自のコピーを保持することを意味します。この動作は、参照が同じ基礎となるオブジェクトを指すクラスとは異なります。構造体のリストを操作する場合、これらの値の型のセマンティクスを理解することが重要です。
次のコードを検討してください。
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
このコードは、MyList の戻り値が返されたことを示すエラーをトリガーします。 [int] は変数ではないため変更できません。このエラーは、値の型が割り当て時にコピーされることが原因で発生します。
Struct obItem = MyList[1]; // Creates a new instance of MyStruct obItem.Name = "Gishu"; // Modifies the new instance
ここで、obItem は、MyList[1] からのデータのコピーを持つ MyStruct の新しいインスタンスです。 obItem に加えられた変更は、リスト内の元の要素には影響しません。
解決策:
構造体のリスト内の要素を変更する必要がある場合は、次の点を考慮してください。オプション:
インターフェイスを使用した例を次に示します:
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); }
結論:
クラスのリストは要素を変更するためのより高い柔軟性を提供しますが、値のセマンティクスが必要な場合には構造体が役立ちます。値の型の性質を理解し、代替ソリューションを検討することで、C# で構造体のリストを効果的に操作できるようになります。
以上がC# の構造体のリスト内の要素を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。