请考虑以下事项:
var o = new { Foo = "foo", Bar = "bar" };
此实例是只读的,因为匿名类型不像类那样实现setter:
public class O
{
public String Foo { get; set; }
public String Bar { get; set; }
}
是否可以“打开”匿名实例并允许更改其属性?最好用比创建课程所需的字符少的字符。
我想也许这可以通过Object上的扩展方法完成; o.SetProperty(o.Foo, "foo!");
,如果你无法在构造对象时在线实现setter。
答案 0 :(得分:7)
不,导致C#中的匿名类型在设计上是不可变的。
答案 1 :(得分:3)
匿名类型在设计上是不可变的,因此您无法更改其状态。您可以使用反射(正如Mark Gravell正确指出的那样),但从设计的角度来看,这也不是理想的表现。
您可以通过多种方式解决此问题:
tupleA.WithItem2(newValueForItem2)
之类的方法。与string
类相似。