構造体のリストの値の変更
構造体のリストを操作する場合、要素を変更しようとするとエラーが発生する場合があります。この問題は、値型変数ごとに個別のインスタンスを作成する構造体の値型セマンティクスが原因で発生します。その結果、構造体要素が別の変数にコピーされるとき、その変更は元の要素には影響しません。
このジレンマの解決策は、構造体がインターフェイスを公開できるという事実にあります。目的のプロパティの set アクセサーを使用してインターフェイスを作成すると、ボックス化されたオブジェクトを指すインターフェイス参照を介して基になる構造体を変更できます。次のコードは、この概念を示しています。
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)); // Using a boxed object MyStruct temp = (MyStruct)obList[1]; temp.Name = "Gishu"; // Using the interface IMyStructModifier temp2 = obList[1] as IMyStructModifier; temp2.Name = "Now Gishu";
このメソッドでは、ボックス化が発生する可能性がありますが、構造体のリスト内の要素を変更できます。したがって、型の設計を検討する場合、コレクションの保存と変更の必要性が、クラスと構造体の間での適切なセマンティックの選択をオーバーライドするべきではありません。
以上がC# で構造体のリスト内の値を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。