草庐IT

Immutability

全部标签

c# - 如何在 C# 中创建不可变对象(immutable对象)?

关于BestpracticesforC#patternvalidation的问题,投票最高的答案说:Itendtoperformallofmyvalidationintheconstructor.ThisisamustbecauseIalmostalwayscreateimmutableobjects.如何在C#中创建不可变对象(immutable对象)?您是否只使用readonly关键字?如果您想在EntityFramework生成的模型类的构造函数中进行验证,这将如何工作?会不会像下面这样?publicpartialreadonlyPerson{publicPerson()}

c# - 如何在 C# 中创建不可变对象(immutable对象)?

关于BestpracticesforC#patternvalidation的问题,投票最高的答案说:Itendtoperformallofmyvalidationintheconstructor.ThisisamustbecauseIalmostalwayscreateimmutableobjects.如何在C#中创建不可变对象(immutable对象)?您是否只使用readonly关键字?如果您想在EntityFramework生成的模型类的构造函数中进行验证,这将如何工作?会不会像下面这样?publicpartialreadonlyPerson{publicPerson()}

c# - 在 C# 中,为什么我不能在 foreach 循环中修改值类型实例的成员?

我知道值类型应该是不可变的,但这只是一个建议,不是规则,对吧?那么为什么我不能做这样的事情:structMyStruct{publicstringName{get;set;}}publicclassProgram{staticvoidMain(string[]args){MyStruct[]array=newMyStruct[]{newMyStruct{Name="1"},newMyStruct{Name="2"}};foreach(variteminarray){item.Name="3";}//for(inti=0;i代码中的foreach循环无法编译,而注释的for循环工作正常。

c# - 在 C# 中,为什么我不能在 foreach 循环中修改值类型实例的成员?

我知道值类型应该是不可变的,但这只是一个建议,不是规则,对吧?那么为什么我不能做这样的事情:structMyStruct{publicstringName{get;set;}}publicclassProgram{staticvoidMain(string[]args){MyStruct[]array=newMyStruct[]{newMyStruct{Name="1"},newMyStruct{Name="2"}};foreach(variteminarray){item.Name="3";}//for(inti=0;i代码中的foreach循环无法编译,而注释的for循环工作正常。

c# - 如何创建不可变类?

我正在努力创建一个不可变类。我已将所有属性标记为只读。我有一个类(class)项目列表。尽管如果属性是只读的,则可以修改列表。公开列表的IEnumerable使其不可变。我想知道要使类不可变必须遵循的基本规则是什么? 最佳答案 我认为你在正确的轨道上-所有注入(inject)类的信息都应该在构造函数中提供所有属性都应该只是getter如果一个集合(或数组)被传递给构造函数,它应该被复制以防止调用者以后修改它如果您要归还您的收藏,请归还副本或只读版本(例如,使用ArrayList.ReadOnly或类似的-您可以将其与前一点结合起来并

c# - 如何创建不可变类?

我正在努力创建一个不可变类。我已将所有属性标记为只读。我有一个类(class)项目列表。尽管如果属性是只读的,则可以修改列表。公开列表的IEnumerable使其不可变。我想知道要使类不可变必须遵循的基本规则是什么? 最佳答案 我认为你在正确的轨道上-所有注入(inject)类的信息都应该在构造函数中提供所有属性都应该只是getter如果一个集合(或数组)被传递给构造函数,它应该被复制以防止调用者以后修改它如果您要归还您的收藏,请归还副本或只读版本(例如,使用ArrayList.ReadOnly或类似的-您可以将其与前一点结合起来并

c# - 为什么 C# 不允许只读局部变量?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭去年。社区在10个月前审查了是否重新打开此问题,然后将其关闭:原始关闭原因未解决Improvethisquestion就此与同事进行了友好的辩论。我们对此有一些想法,但想知道SO人群对此有何看法?

c# - 为什么 C# 不允许只读局部变量?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭去年。社区在10个月前审查了是否重新打开此问题,然后将其关闭:原始关闭原因未解决Improvethisquestion就此与同事进行了友好的辩论。我们对此有一些想法,但想知道SO人群对此有何看法?

c# - 错误 : "Cannot modify the return value" c#

我正在使用自动实现的属性。我想解决以下问题的最快方法是声明我自己的支持变量?publicPointOrigin{get;set;}Origin.X=10;//failswithCS1612ErrorMessage:Cannotmodifythereturnvalueof'expression'becauseitisnotavariableAnattemptwasmadetomodifyavaluetypethatwastheresultofanintermediateexpression.Becausethevalueisnotpersisted,thevaluewillbeuncha

c# - 错误 : "Cannot modify the return value" c#

我正在使用自动实现的属性。我想解决以下问题的最快方法是声明我自己的支持变量?publicPointOrigin{get;set;}Origin.X=10;//failswithCS1612ErrorMessage:Cannotmodifythereturnvalueof'expression'becauseitisnotavariableAnattemptwasmadetomodifyavaluetypethatwastheresultofanintermediateexpression.Becausethevalueisnotpersisted,thevaluewillbeuncha