相关疑难解决方法(0)

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

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

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

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

c# c#-3.0

50
推荐指数
1
解决办法
1万
查看次数

匿名类型的非只读替代方案

在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#中,必须在方法之外定义)而不使其只读?如果不是,想要这样做是否存在根本性的错误,我应该采用不同的方法吗?

c# struct anonymous-types data-structures

32
推荐指数
3
解决办法
2万
查看次数

标签 统计

c# ×2

anonymous-types ×1

c#-3.0 ×1

data-structures ×1

struct ×1