c# – 只读本地变量不能用作赋值对象
如果我有:
var myObjects = new ConcurrentBag<object>(); 并尝试通过以下方式删除对象: foreach (var myObject in myObjects.ToArray()) { myObjects.TryTake(out myObject); } 编译器抱怨:“只读本地变量不能用作赋值目标” 然而,如果我在foreach中添加一个本地引用,它会编译: foreach (var myObject in myObjects.ToArray()) { var localReference = myObject; myObjects.TryTake(out localReference); } 这里究竟发生了什么? 解决方法
foreach中的迭代变量(即myObject)不能在foreach内部分配一个新值.不允许.
在第一种情况下,外部尝试这样做.在第二种情况下,你永远不会尝试重新分配给myObject,所以没关系. 引用ECMA规范,15.8.4,强调我的:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |