在C#中,匿名类型的属性是只读的:
var person = new { Surname = "Smith", OtherNames = "John" };
person.Surname = "Johnson"; // ERROR: .Surname is read-only
Run Code Online (Sandbox Code Playgroud)
当然,如果我想要可写字段或属性,我可以声明一个真正的类,但不管怎样,这个设计决策背后的原因是什么使属性成为只读?
在C#中,匿名类型可以如下:
method doStuff(){
var myVar = new {
a = false,
b = true
}
if (myVar.a)
{
// Do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是,以下内容将无法编译:
method doStuff(){
var myVar = new {
a = false,
b = true
}
if (myVar.a)
{
myVar.b = true;
}
}
Run Code Online (Sandbox Code Playgroud)
这是因为myVar的字段是只读的,无法分配.似乎想做一些像后者相当普遍的事情; 也许我见过的最好的解决方案就是在方法之外定义一个结构.
但是,真的没有办法让上面的块工作吗?困扰我的原因是,myVar是这个字段的局部变量,所以它似乎只应该在使用它的方法中引用.此外,需要将struct放在方法之外可以使对象的声明远离其使用,特别是在长方法中.
换句话说,有没有匿名类型的替代方法,这将允许我定义这样的"结构"(我意识到结构存在于C#中,必须在方法之外定义)而不使其只读?如果不是,想要这样做是否存在根本性的错误,我应该采用不同的方法吗?