Does foreach() iterate by reference?

前端 未结 10 1248
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-04 23:37

Consider this:

List obj_list = get_the_list();
foreach( MyClass obj in obj_list )
{
    obj.property = 42;
}

Is obj

10条回答
  •  执笔经年
    2020-12-04 23:54

    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."

提交回复
热议问题