相关疑难解决方法(0)

什么是不变性,我为什么要担心它?

我已经阅读了几篇关于不变性的文章,但仍然没有很好地遵循这个概念.

我最近在这里提到了一个线程,提到了不变性,但由于这本身就是一个话题,我现在正在制作一个专门的线程.

我在过去的帖子中提到过,我认为不变性是将对象设为只读并使其可见性低的过程.另一位成员表示,这与此没有任何关系.此页面(系列的一部分)使用不可变类/结构的示例,它使用readonly和其他概念将其锁定.

在这个例子中,状态的定义究竟是什么?国家是一个我没有真正掌握的概念.

从设计指南的角度来看,一个不可变的类必须是一个不接受用户输入并且真的只返回值的类?

我的理解是,任何只返回信息的对象都应该是不可变的并且"锁定",对吧?因此,如果我想在具有该方法的专用类中返回当前时间,我应该使用引用类型,因为它将工作类型的引用,因此我受益于不变性.

oop immutability

56
推荐指数
4
解决办法
7726
查看次数

C#中的不可变类型和属性

C#中的不可变类型和不可变属性是什么意思?你能举一个简单的例子吗?

c# types immutability

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

C#中的匿名类型

// x is compiled as an int 
var x = 10;

// y is compiled as a string 
var y = "Hello";

// z is compiled as int[] 
var z = new[] { 0, 1, 2 };
Run Code Online (Sandbox Code Playgroud)

// ano is compiled as an anonymous type 
var ano = new { x1 = 10, y1 = "Hello" };
Run Code Online (Sandbox Code Playgroud)

ano创建的对象属性是只读的.我想弄清楚为什么这些属性是只读的.建议表示赞赏?

编辑:

var ano1 = new { x1 = 10, y1 = "Hello" };

var ano2 = new { x1 = …
Run Code Online (Sandbox Code Playgroud)

c# var anonymous-types

11
推荐指数
1
解决办法
9856
查看次数

为什么匿名类型在 C# 中是不可变的?

可能重复:
为什么 C# 中匿名类型的属性是只读的?

我写了这样的东西,

 var suspense = new { Name = "Android", Market = string.Empty };
 suspense.Market = "Potential";
Run Code Online (Sandbox Code Playgroud)

.NET 抛出错误

无法分配属性或索引器“AnonymousType#1.Market”——它是只读的

我知道 C# 中的 AnonymousType 是不可变的,但为什么呢?这是由于 CLR 的某些限制吗?

.net c# anonymous-types immutability

6
推荐指数
1
解决办法
3367
查看次数

创建具有可变字段的匿名类型?

我可以使用下面的代码轻松创建一个匿名类。但是我不能写它。有没有办法可以写入某种未命名的类?

var test = new { a = 5, b = "sz" };
test.a++;
Run Code Online (Sandbox Code Playgroud)

c# anonymous-types

5
推荐指数
1
解决办法
1947
查看次数

不要在没有setter的情况下序列化属性

我需要序列化OpenTK.Vector2包含带有getter但没有setter的属性的objects().我希望一般可以忽略这些属性,否则我最终会从具有两个相关数据(XY)的对象中充分夸大JSON .

代码:

JsonSerializerSettings settings = new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore };
Vector2 v = new Vector2 { X = 1, Y = 0 };
string json = JsonConvert.SerializeObject(v, settings);
Run Code Online (Sandbox Code Playgroud)

生成字符串:

{
   "X" : 1.0,
   "Y" : 0.0,
   "Length" : 1.0,
   "LengthFast" : 1.0016948,
   "LengthSquared" : 1.0,
   "PerpendicularRight" : {
      "X" : 0.0,
      "Y" : -1.0,
      "Length" : 1.0,
      "LengthFast" : 1.0016948,
      "LengthSquared" : 1.0,
      "PerpendicularRight" : {
         "X" : -1.0,
         "Y" : …
Run Code Online (Sandbox Code Playgroud)

json.net opentk

5
推荐指数
1
解决办法
1105
查看次数

点击它时无法编辑DataGridView内容(即使ReadOnly = false)?

这里的上下文是我为DataGridView使用一种特殊的DataSource,这是一种匿名类型,可以按如下方式创建:

var data = new[] { new { A = "A", B = 1 }, new { A = "B", B = 2 }, new { A = "C", B = 3 }};
Run Code Online (Sandbox Code Playgroud)

问题是如果我将上述数据源用于DataGridView,我无法通过单击其单元格来编辑DataGridView的内容.

myDataGridView.DataSource = data;
Run Code Online (Sandbox Code Playgroud)

你能否向我解释为什么以及如何使其可编辑?或者只是我们不能这样做?

非常感谢您的帮助.

c# datagridview

3
推荐指数
1
解决办法
4330
查看次数

修改匿名类型的字段?

在这个例子中:

var p1 = new {Name = "A", Price = 3};
Run Code Online (Sandbox Code Playgroud)

这转化为IL:

class __Anonymous1
{
   private string name ;
   private int price;
   public string Name{ get { return name; } set { name = value ; } }
   public int Price{ get { return price; } set { price= value ; } }
}
__Anonymous1 p1 = new __Anonymous1();
p1.Name = "A";
pt.Price =3
Run Code Online (Sandbox Code Playgroud)

根据IL,它是允许的,为什么会这样?它背后的决定是什么?不应该只读?

谢谢

这是我的第一个问题,温柔.

.net c#

2
推荐指数
1
解决办法
3911
查看次数

标签 统计

c# ×6

anonymous-types ×3

immutability ×3

.net ×2

datagridview ×1

json.net ×1

oop ×1

opentk ×1

types ×1

var ×1