3

構造体の操作に問題があります。

私はこの構造体を持っています:

struct MyStruct
{
  public int x;
  public int y;

  public MyStruct(int x,int y)
  {
    this.x = x;
    this.y = y;
  }
}

この構造体を次のようなリストに追加しようとすると、次のようになります。

List<MyStruct> myList = new List<MyStruct>();

// Create a few instances of struct and add to list
myList.Add(new MyStruct(1, 2));
myList.Add(new MyStruct(3, 4));
myList[1].x = 1;//<=====Compile-time error!

このエラーが発生します:

Compile-time error: Can't modify '...' because it's not a variable

なぜこのエラーが発生するのですか、またそれを解決する方法は?

4

1 に答える 1

4

構造体は通常変更可能です。つまり、そのメンバーの値を直接変更できます。

このウェブサイトによると:

ただし、リストなどのコレクション クラスで構造体が使用されている場合、そのメンバーを変更することはできません。コレクションにインデックスを付けて項目を参照すると、変更できない構造体のコピーが返されます。リスト内の項目を変更するには、構造体の新しいインスタンスを作成する必要があります。

    List<MyStruct> myList = new List<MyStruct>();

 // Create a few instances of struct and add to list
myList.Add(new MyStruct(1, 2));
myList.Add(new MyStruct(3, 4));
myList[1].x = 1;//<=====Compile-time error!

 // Do this instead
 myList[1] = new MyStruct(1,myList[1].y);

構造体を配列に格納すると、構造体のメンバーのいずれかの値を変更できます。

 MyStruct[] arr = new MyStruct[2];
 arr[0] = new MyStruct(1, 1);
 arr[0].x= 5.0;  // OK
于 2013-03-14T11:37:25.813 に答える