I have a modifying method with a signature like
private bool Modify(ref MyClass obj);
that will make modifications to obj
and indicate succes with it's return value. Modify
is not reassigning the reference (I know that this wouldn't work), just modifying instance fields, so I want to use it to do something like the following:
foreach(MyClass obj in myList)
{
bool success = Modify(obj);
// do things depending on success
}
I am running into a problem compiling as obj
is "not being passed with the ref
keyword". However, if I put the ref keyword in like so:
bool success = Modify(ref obj);
I get "cannot use obj
as a ref
/out
because it is a 'foreach iteration variable". I understand that foreach uses an immutable iterator and that's why this doesn't work.
My question is what is the easiest alternative to make something like this work?
I have tried using
foreach(int i = 0; i < myList.Count; i++)
{
bool success = Modify(ref myList[i]);
// do things depending on success
}
but they I get "a property or indexer may not be passed as an out of ref parameter".
Thanks your help.
You state
Modify is not reassigning the reference
Therefore, there is no reason the Modify(ref MyClass)
function needs to pass argument by ref
.
You should be able to do the same "modifications", whatever that is (please clarify that) by passing the object reference by value, i.e. removing the ref
keyword.
So, the fix here should be changing your Modify function signature from Modify(ref MyClass)
to Modify(MyClass)