为什么结构属性在列表中不能更改? [重复]

问题描述 投票:0回答:1

请考虑以下代码:

public class Program {

    public struct A 
    {
        public int Prop {get;set;}
    }

    public static void Main()
    {
        var obj = new A();
        obj.Prop = 10;

        var list = new List<A>(){obj};
        foreach(var l in list) {
            l.Prop = 20; //here I'm getting compile time error "Cannot modify members of 'l' because it is a 'foreach iteration variable'"
        }
    }
}

所以我的问题是:为什么在遍历结构列表时不能分配结构属性?请注意,即使像这样简单地进行迭代:

for (int i=0; i<list.Count(); ++i)
    list[i].Prop  = 20;

我仍然收到编译时错误...

c# list loops compiler-errors value-type
1个回答
1
投票

您无法修改要使用foreach进行迭代的集合。

相反,您应该使用for循环,该循环允许:

for(int i = 0; i < list.Length; i++)
{
  list[i].Prop = 200;
}

您可以参考这个问题:Why can't we assign a foreach iteration variable, whereas we can completely modify it with an accessor?

© www.soinside.com 2019 - 2024. All rights reserved.