1. ホーム
  2. c#

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

2023-11-19 14:50:16

質問

構造体のリストがあり、その中の1つの要素を変更したい。たとえば、次のような場合です。

MyList.Add(new MyStruct("john");
MyList.Add(new MyStruct("peter");

では、1つの要素を変更したいと思います。

MyList[1].Name = "bob"

しかし、これを実行しようとすると、次のようなエラーが発生します。

の戻り値を変更することはできません。 System.Collections.Generic.List.this[int]' は変数ではないので、その戻り値を変更できません。 変数でないため、変更できません。

クラスのリストを使用すると、この問題は発生しません。

構造体が値型であることが答えに関係しているのでしょうね。

では、構造体のリストがある場合、それらを次のように扱うべきでしょうか。 読み取り専用 ? リスト内の要素を変更する必要がある場合、構造体ではなくクラスを使用する必要がありますか?

どのように解決するのですか?

MyList[1] = new MyStruct("bob");

C#の構造体は、ほとんどの場合、immutable(一旦作成された内部の状態を変更する方法がない)であるように設計されるべきです。

あなたの場合、やりたいことは配列のインデックスを指定して構造体全体を置き換えることであり、単一のプロパティやフィールドだけを変更しようとすることではありません。