为什么C#中的匿名类型的属性是只读的?

Rom*_*kov 50 c# c#-3.0

在C#中,匿名类型的属性是只读的:

var person = new { Surname = "Smith", OtherNames = "John" };
person.Surname = "Johnson";  // ERROR: .Surname is read-only
Run Code Online (Sandbox Code Playgroud)

当然,如果我想要可写字段或属性,我可以声明一个真正的类,但不管怎样,这个设计决策背后的原因是什么使属性成为只读?

JP *_*oto 51

有趣的文章在这里.从那里 ...

... [B]确保成员不会更改,我们确保哈希在对象的生命周期内是常量.这允许匿名类型与哈希表之类的集合一起使用,而在修改成员时实际上不会丢失它们.不可变性有很多好处,它大大简化了使用对象的代码,因为它们只能在创建时分配值然后才被使用(想想线程)

  • 是的,不变性有很多好处,但是可变性也有很多好处 - 你可以使用上面的论证来证明列表也应该是不可变的.这个决定绝对没有意义. (12认同)
  • 这很有趣,因为 vb.net 中的匿名类型是可变的...... (2认同)