Does foreach() iterate by reference?
c#, foreach, reference
Solution
Yes, `obj` is a reference to the current object in the collection (assuming `MyClass` is in fact a class). If you change any properties via the reference, you're changing the object, just like you would expect.
Be aware however, that you cannot change the variable `obj` itself as it is the iteration variable. You'll get a compile error if you try. That means that you can't null it and if you're iterating value types, you can't modify any members as that would be changing the value.
The C# language specification states (8.8.4)
"The iteration variable corresponds to a read-only local variable with a scope that extends over the embedded statement."
Problem
Consider this: ``` List<MyClass> obj_list = get_the_list(); foreach( MyClass obj in obj_list ) { obj.property = 42; } ``` Is `obj` a reference to the corresponding object within the list so that when I change the property the change will persist in the object instance once constructed somewhere?