因为匿名类型的属性在构造后是只读的。一旦对象创建,就不能更改它们。它们可以使用只读属性来实现这一点,但不能使用公共字段(您总是可以更改字段)。 编辑:我找了一下,但没有明显的原因说明他们为什么不使用公共只读字段。然而,我最好的猜测是:所以你可以有属性。如果它们暴露了公共字段,并且没有任何属性,那么无论如何都会让寻找公共属性的内容无法使用匿名类型,例如WPF绑定。因此,具有私有只读后备字段的属性可能是更安全的选择。
不明显的是为什么他们不直接使用只读属性,但一个很好的理由是: 如果他们只使用只读属性,你会知道它的名称,因此很容易使用反射来更改它。 因为他们生成了一个私有的后备字段,所以要知道它的名称要困难得多(你必须检查生成的 IL),因此你使用反射更改它的可能性要小得多。当然,你仍然可以这样做,但这将是一个明显奇怪的事情,你肯定会想一两次才会这样做。