【发布时间】:2018-01-04 22:32:37
【问题描述】:
我有一个带有类似签名的修改方法
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
}
但我得到“属性或索引器可能不会作为超出 ref 参数传递”。
感谢您的帮助。
【问题讨论】:
-
也许使用 simple
for循环而不是foreach -
为什么需要通过 ref 传递对象给这个 Modify 函数?
-
可以不使用
ref修改obj的属性。使用ref允许您修改引用本身。这几乎肯定不是您想要的。 -
定义如何修改它。如果要更新属性或字段,则不需要
ref参数。如果您完全重新分配参考,那是一个单独的问题。 -
请更新您的问题以包括您如何在
Modify中使用obj