mpa*_*res 12 c# struct c#-9.0 c#-record-type c#-10.0
我最近发现了C# 中的关键字,并且发现如果我理解正确的话,record
它可以用作值类型而不是引用类型。record struct
但是,我很难理解何时确切使用而record struct
不仅仅是struct
. 据我所知,record struct
具有一些结构没有的基本实现(例如==
and!=
运算符、对 的重写ToString
以及其他一些东西),但这就是两者之间的区别吗?如果不是,在决定使用其中一种时需要考虑什么?
从我目前看到的方式来看,最好始终使用record struct
just 来利用它已经附带的那些实现。
Rod*_*ues 15
这个答案假设:
struct
然后,使用而不是的决定record struct
归结为:
您不需要内置的默认实现record
。
也许您的结构体生命周期很短,以至于它仅用于传递结构化数据;它将在非常知名的地方创建、消耗和处置,并且您可以完全控制它们的使用。如果您完全确定不需要相等比较、模式匹配或字符串表示,那么您可以避免程序集中的一些元数据和几行文档。
您不希望record
使用默认的实现。
考虑到您可以将类型声明为record struct
并仍然提供任何自动行为的自定义实现,这一点有点弱。您甚至可以使用简洁的语法为自动属性指定属性。因此,除非您计划为大多数自动实现提供自定义实现,否则您仍然会从使用record
.
您无法使用record struct
,因为您被锁定在不支持 c#10 的 .net 版本中。
好吧,在这种情况下不多说。
总而言之,record struct
在一般情况下更好,老实说,struct
从一开始就应该是默认的。