ホームページ >バックエンド開発 >C++ >C# で構造体のリスト内の要素を変更するにはどうすればよいですか?

C# で構造体のリスト内の要素を変更するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-05 00:20:39775ブラウズ

How Can I Modify Elements Within a List of Structs in C#?

構造体のリスト内の要素を変更する

構造体のリストを操作する場合、単純な代入を使用して個々の要素を変更しようとすると結果が変わりますエラー メッセージ「System.Collections.Generic.List.this[int] の戻り値は変更できません。これは、 変数。"これは、構造体の値型のセマンティクスが原因で発生します。

値の型のセマンティクスを理解する

C# では、構造体変数はデータのコピーを保持します。これは、コピーに加えられた変更を意味します。オリジナルには影響しません。この動作は、オブジェクト参照が実際のデータを指すクラスとは異なります。

構造要素へのアクセスと変更

この例では、MyList[1] を割り当てるとき。名前を「bob」にすると、MyStruct の新しいインスタンスが作成され、変数に割り当てられます。ただし、この新しいインスタンスはリスト内の元の要素を参照しません。したがって、元の要素は変更されません。

リスト内の構造体要素を変更するためのオプション

構造体のリスト内の実際の要素を変更するには、次の方法を検討してください。

  1. インターフェースを使用する: setter メソッドを使用してインターフェースを実装することで、インターフェイス参照を介して構造体の内部メンバーを変更できます。ただし、このアプローチではボックス化が導入され、パフォーマンスが低下します。
  2. 同等のクラスを作成する: リスト内の要素の変更が重要な場合は、構造体の代わりにクラスを使用することをお勧めします。 。クラスは参照型であるため、元のインスタンスを直接変更できます。

構造体とクラスの選択

構造体とクラスのどちらを使用するかの決定主にコレクションに保存する必要性に基づくべきではありません。代わりに、表現されるデータのセマンティクスと要件を考慮してください。一般に、単一の不変値を表す値オブジェクトには構造体が好まれます。一方、クラスは、変更可能な状態と潜在的に複雑な関係を持つオブジェクトを表現することに優れています。

以上がC# で構造体のリスト内の要素を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。