草庐IT

不变性

全部标签

Dart 不变性

AuthStatecopy({FirebaseUserfirebaseUser,Stringtoken,Listcontracts,boolloadingContracts,StringcontractsError,ListsearchModules,boolloadingSearchModules,StringsearchModulesError}){AuthStatestate=newAuthState(firebaseUser??=this.firebaseUser,token??=this.token,contracts??=this.contracts,loadingCont

c# - C#中的字符串不变性

我很好奇StringBuilder类是如何在内部实现的,所以我决定查看Mono的源代码并将其与Reflector的Microsoft实现的反汇编代码进行比较。本质上,微软的实现使用char[]在内部存储一个字符串表示,以及一堆不安全的方法来操作它。这很简单,并没有提出任何问题。但是我很困惑,当我发现Mono在StringBuilder中使用了一个字符串时:privateint_length;privatestring_str;第一个想法是:“多么愚蠢的StringBuilder”。但后来我发现可以使用指针来改变字符串:publicStringBuilderAppend(stringva

c# - 与 C# 相比,F# 的内置不变性有哪些优势?

我听说F#原生支持不可变性,但C#无法复制它呢?从C#不可变数据中得不到的F#不可变数据会得到什么?同样在F#中,没有办法创建可变数据吗?一切都是不可变的吗?如果您在应用程序中同时使用C#和F#,是否可以在C#中更改不可变的F#数据?或者您是否只需要创建新的C#类型来使用不可变的F#数据并替换指向这些数据的引用? 最佳答案 F#的工作方式使得处理不可变数据变得更加容易,但在这方面,没有什么特别之处是C#无法完成的。不过,它可能无法提供简洁的语法。F#通过mutable关键字支持可变数据。F#不是纯函数式语言。它支持循环等命令式结构以

c# - 结构的不变性

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyaremutablestructsevil?我在包括此处在内的很多地方都读到过,最好将结构设置为不可变。这背后的原因是什么?我看到许多Microsoft创建的可变结构,例如xna中的结构。BCL中可能还有更多。不遵循此指南的利弊是什么?

c# - 不变性和 XML 序列化

我有几个类,一旦设置了初始值,它们就是不可变的。EricLippert称之为write-onceimmutability.在C#中实现一次写入不变性通常意味着通过构造函数设置初始值。这些值初始化只读字段。但是如果您需要使用XmlSerializer或DataContractSerializer将这样的类序列化为XML,则必须具有无参数构造函数。有人对如何解决这个问题有建议吗?是否有其他形式的不变性更适合序列化?编辑:正如@Todd所指出的,DataContractSerializer不需要无参数构造函数。根据DataContractSerializerdocumentationonMS

C#、不变性和公共(public)只读字段

我在很多地方都读到公开字段不是一个好主意,因为如果您以后想要更改属性,您将不得不重新编译所有使用您的类的代码。但是,在不可变类的情况下,我不明白为什么您需要更改属性-毕竟您不会向“集合”添加逻辑。对此有什么想法,我是否遗漏了什么?区别的例子,对于那些比文本更容易阅读代码的人:)//ImmutableTupleusingpublicreadonlyfieldspublicclassTuple{publicreadonlyT1Item1;publicreadonlyT2Item2;publicTuple(T1item1,T2item2){Item1=item1;Item2=item2;}}

c# - 禁用 WPF 窗口的最大化按钮,保持调整大小功能不变

因此WPF窗口只有四个调整大小模式选项:NoResize、CanMinimize、CanResize和CanResizeWithGrip。不幸的是,启用调整大小的选项也可以启用最大化窗口,而那些不启用的选项对我来说毫无用处。是否可以在保留调整大小功能的同时禁用最大化按钮?我更喜欢不涉及WinAPI内容的解决方案。 最佳答案 仅禁用最大化:ResizeMode="CanMinimize" 关于c#-禁用WPF窗口的最大化按钮,保持调整大小功能不变,我们在StackOverflow上找到一个

c# - 错误 : No Entity Framework provider found for the ADO. 具有不变名称 'System.Data.SqlClient' 的 NET 提供程序

我最近将一个旧项目中的EntityFramework从版本4或5升级/更新到版本6。现在我得到这个异常:Anexceptionoftype'System.InvalidOperationException'occurredinEntityFramework.dllbutwasnothandledinusercodeAdditionalinformation:NoEntityFrameworkproviderfoundfortheADO.NETproviderwithinvariantname'System.Data.SqlClient'.Makesuretheproviderisreg

C# 和不可变性和只读字段……谎言?

我发现人们声称在一个类中使用所有只读字段并不一定会使该类的实例不可变,因为即使在初始化(构造)之后也有更改只读字段值的“方法”。如何?有什么方法?所以我的问题是什么时候我们才能在C#中真正拥有一个“真正的”不可变对象(immutable对象),我可以在线程中安全地使用它?匿名类型也会创建不可变对象(immutable对象)吗?有人说LINQ在内部使用不可变对象(immutable对象)。究竟如何? 最佳答案 您在其中问了大约五个问题。我会回答第一个:Havingallreadonlyfieldsinaclassdoesnotnece

c# - 如何在不变得丑陋的情况下使方法可取消?

我目前正在改造我们长期运行的方法,使其可以取消。我计划使用System.Threading.Tasks.CancellationToken来实现它。我们的方法通常会执行一些长时间运行的步骤(主要是向硬件发送命令然后等待硬件),例如voidRun(){Step1();Step2();Step3();}我对取消的第一个(也许是愚蠢的)想法会把它变成boolRun(CancellationTokencancellationToken){Step1(cancellationToken);if(cancellationToken.IsCancellationRequested)returnfal