列表中的C#结构

列表中的C#结构,c#,struct,C#,Struct,关于结构的快速问题。。。 我有一个结构,让我们假设它看起来像这样: struct myStruct { public int x, y; } 然后我用这个结构做了一个列表 List<myStruct> myList = new List<myStruct>; List myList=新列表; 然后我在列表中循环,我想改变x的值 for(int i=0; i<myList.Count; i++) { ...//do stuff to x

关于结构的快速问题。。。 我有一个结构,让我们假设它看起来像这样:

struct myStruct {
     public int x, y;
}
然后我用这个结构做了一个列表

List<myStruct> myList = new List<myStruct>;
List myList=新列表;
然后我在列表中循环,我想改变x的值

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

     ...//do stuff to x

     myList[i].x = newX;
}

for(int i=0;i结构是一种值类型,通过值传递.x=newX
您正在为
myList
i
th元素的
copy的
x
属性赋值,该属性将在语句执行后被丢弃。幸运的是,编译器将阻止您犯此错误。

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

var val = myList[i];
val.x = newX;
myList[i] = val;

这就是为什么永远不应该创建可变结构。已经有人问过,如果需要修改列表中的值,为什么不使用
,而像
元组
?这是我最终做的,但我很好奇为什么会出现这个错误。谢谢。