問題:
を使用して構造体のリスト内の要素を変更しようとすると配列インデックス演算子 (例: MyList[1].Name = "bob") の場合、エラーが発生します。発生しました:「変数ではないため、'System.Collections.Generic.List.this[int]' の戻り値を変更できません。」
説明:
このエラーは、構造体の値型のセマンティクスが原因で発生します。構造体は値によってコピーされます。つまり、構造体のリストから要素にアクセスすると、新しいインスタンスが作成され、値がコピーされます。したがって、この新しいインスタンスを変更しても、リスト内の元の要素には影響しません。
解決策:
代わりにクラスの使用を検討してください:
リスト内の要素を変更する必要性が重要な場合は、構造体の代わりにクラスの使用を検討してください。クラスは参照型です。つまり、値ではなく参照によって渡されます。クラスのリスト内の要素を変更すると、元のインスタンスに直接影響します。
インターフェイスを公開する:
構造体が必要な場合、解決策の 1 つは、構造体。これにより、ボックス化されたオブジェクトを指すインターフェイス参照を通じて変更を行うことができます。
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 temp = obList[1] as IMyStructModifier; temp.Name = "Now Gishu"; foreach (MyStruct s in obList) // => "ABC", "Now Gishu" { Console.WriteLine(s.Name); }
以上がC# で構造体のリスト内の要素を変更するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。