草庐IT

immutability

全部标签

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

c# - API设计中如何避免 "too many parameters"问题?

我有这个API函数:publicResultEnumDoSomeAction(stringa,stringb,DateTimec,OtherEnumd,stringe,stringf,outGuidcode)我不喜欢。因为参数顺序变得不必要地重要。添加新字段变得更加困难。更难看出传递的是什么。将方法重构为更小的部分更加困难,因为它会产生另一个在子函数中传递所有参数的开销。代码更难阅读。我想到了一个最明显的想法:有一个封装数据的对象并传递它,而不是一个一个地传递每个参数。这是我想出的:publicclassDoSomeActionParameters{publicstringA;publ

c# - API设计中如何避免 "too many parameters"问题?

我有这个API函数:publicResultEnumDoSomeAction(stringa,stringb,DateTimec,OtherEnumd,stringe,stringf,outGuidcode)我不喜欢。因为参数顺序变得不必要地重要。添加新字段变得更加困难。更难看出传递的是什么。将方法重构为更小的部分更加困难,因为它会产生另一个在子函数中传递所有参数的开销。代码更难阅读。我想到了一个最明显的想法:有一个封装数据的对象并传递它,而不是一个一个地传递每个参数。这是我想出的:publicclassDoSomeActionParameters{publicstringA;publ

c# - 为什么可变结构是 “evil” ?

在此处关于SO的讨论之后,我已经多次阅读可变结构是“邪恶”的评论(就像在对question的回答中一样)。C#中的可变性和结构的实际问题是什么? 最佳答案 结构是值类型,这意味着它们在传递时被复制。因此,如果您更改一个副本,您只会更改该副本,而不是原始副本,也不会更改可能存在的任何其他副本。如果您的结构是不可变的,那么通过值传递产生的所有自动副本都将相同。如果你想改变它,你必须有意识地通过使用修改后的数据创建结构的新实例来做到这一点。(不是副本) 关于c#-为什么可变结构是“evil”?

c# - 为什么可变结构是 “evil” ?

在此处关于SO的讨论之后,我已经多次阅读可变结构是“邪恶”的评论(就像在对question的回答中一样)。C#中的可变性和结构的实际问题是什么? 最佳答案 结构是值类型,这意味着它们在传递时被复制。因此,如果您更改一个副本,您只会更改该副本,而不是原始副本,也不会更改可能存在的任何其他副本。如果您的结构是不可变的,那么通过值传递产生的所有自动副本都将相同。如果你想改变它,你必须有意识地通过使用修改后的数据创建结构的新实例来做到这一点。(不是副本) 关于c#-为什么可变结构是“evil”?

javascript - 使用 immutable.js 和 Facebook 流程进行静态类型检查

我一直在使用Immutable.js对于我的React应用程序,我很喜欢它。Facebook也发布了Flow.Flow可以让我做一些很酷的事情,比如prop类型的编译时验证。问题是我的Prop通常是不可变的对象。Immutable.js和Flow结合使用有什么好的方法吗?给定一个Immutable.js对象参数,我可以使用Flow以某种方式指定它应该包装的对象的类型吗?在那个对象中,我可能有字符串、数字、bool值,更重要的是其他Immutable.js对象。 最佳答案 在撰写本文时,您可以通过从此处获取接口(interface)文