我正在尝试了解一些基本概念:

class Program
{
   private static readonly MyStruct m = new MyStruct();
   static void Main(string[] args)
    {
       //new MutableSample().RunSample();

       Console.WriteLine(m.ChangeInternal());
       Console.WriteLine(m.ChangeInternal());
       Console.WriteLine(m.ChangeInternal());
       Console.Read();
    }
}

public struct MyStruct
{
    private int x;
    public int ChangeInternal()
    {
        this.x = this.x + 1;
        return this.x;
    }
}

当我运行此代码时,它会给我1,1,1,但是当我删除“只读”时,它会给我1,2,3。

有人可以向我解释吗?

最佳答案

C#规范的7.5.4节指出:



因此,当该字段是readonly时,您正在变异一个副本(因为不可能变异一个值,只能变异一个变量)。如果不是,那么您就是在更改字段本身。

埃里克·利珀特(Eric Lippert)在this blog post中对此进行了更详细的描述。引用其结尾:

09-25 18:19