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)中使用结构,则不能修改其成员。通过对集合进行索引来引用该项目会返回该结构的副本,您无法对其进行修改。要更改列表中的项目,您需要创建结构的新实例。

    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 回答