namespace MyNamespace { public struct MyStruct { public string MyString; public int MyInt; public bool MyBool; } public class MyClass { private List<MyStruct> MyPrivateVariable; public List<MyStruct> MyVariable { get { if (MyPrivateVariable == null) { MyPrivateVariable = new List<MyStruct>(); MyPrivateVariable.Add(new MyStruct()); MyPrivateVariable.Add(new MyStruct()); } return MyPrivateVariable; } } public void MyLoop() { foreach (MyStruct ms in MyVariable) { // Doesn't compile,but it works if you execute it through the Immediate window,or in Quickwatch ms.MyBool = false; // Compiles,works MyFunction(ms); } } public void MyFunction(MyStruct ms) { ms.MyBool = false; } } }
对此有任何合理的解释吗?
编译器返回:
Error:
Cannot modify members of ‘ms’ because it is ‘foreach iteration
variable’
编辑:
额外的问题:
我只是尝试从MyFunction更改一个字符串,它实际上并没有更新ms.但是:如果我去快速观察并在那里分配相同的值,它会更新ms.如果它首先不应该编译,为什么会发生这种情况,不应该快速观察异常?
EDIT2:
好的,快速监视也适用于ms的副本,这就是为什么我可以编辑它的值,它实际上并没有改变MyPrivateVariable的内容.
解决方法
你正在使用它们作为可变结构.避免这样做:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。