我有一个签名类似于的修改方法
private bool Modify(ref MyClass obj);
会对obj
进行修改,并通过返回值说明成功。 Modify
并没有重新分配引用(我知道这样不行),只是修改实例字段,所以我想使用它来执行以下操作:
foreach(MyClass obj in myList)
{
bool success = Modify(obj);
// do things depending on success
}
我在编译时遇到了问题,因为obj
没有通过ref
关键字传递。但是,如果我这样加入 ref 关键字:
bool success = Modify(ref obj);
我收到一个错误信息:"无法将obj
用作ref
/out
,因为它是'foreach'迭代变量"。我知道 foreach 使用不可变迭代器,这就是为什么它不起作用的原因。
我的问题是,有什么最简单的替代方法可以让类似这样的操作起作用吗?
我已经尝试使用
foreach(int i = 0; i < myList.Count; i++)
{
bool success = Modify(ref myList[i]);
// do things depending on success
}
但是他们会收到 "a property or indexer may not be passed as an out or ref parameter" 错误。
感谢您的帮助。
for
循环代替foreach
。 - Mityaobj
的属性而不使用ref
。使用ref
允许你修改引用本身,这几乎肯定不是你想要的。 - Jon Bref
参数。如果您要完全重新分配引用,则这是一个单独的问题。请说明您如何修改它。 - Anthony PegramModify
函数内部使用obj
。 - Scott Chamberlain