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