C# 列表中的结构体

bwo*_*gie 2 c# struct

关于结构的简单问题...我有一个结构,让我们假装它看起来像这样:

struct myStruct {
     public int x, y;
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个包含该结构的列表

List<myStruct> myList = new List<myStruct>;
Run Code Online (Sandbox Code Playgroud)

然后我循环遍历列表,我想更改 x 的值......

for(int i=0; i<myList.Count; i++) {

     ...//do stuff to x

     myList[i].x = newX;
}
Run Code Online (Sandbox Code Playgroud)

无法修改 'List<myform.myStruct>.this[int]' 的返回值,因为它不是变量

您能否澄清我对于为什么它不允许我更改 x 值的任何困惑。

clc*_*cto 5

结构是值类型。因此索引器的返回是列表中值的临时副本,无法修改。您必须替换列表中的结构:

var val = myList[i];
val.x = newX;
myList[i] = val;
Run Code Online (Sandbox Code Playgroud)