何时使用记录结构而不是结构,反之亦然?

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 structjust 来利用它已经附带的那些实现。

Rod*_*ues 15

这个答案假设:

struct然后,使用而不是的决定record struct归结为:

  1. 您不需要内置默认实现record

    也许您的结构体生命周期很短,以至于它仅用于传递结构化数据;它将在非常知名的地方创建、消耗和处置,并且您可以完全控制它们的使用。如果您完全确定不需要相等比较模式匹配字符串表示,那么您可以避免程序集中的一些元数据和几行文档。

  2. 您不希望record使用默认的实现。

    考虑到您可以将类型声明为record struct并仍然提供任何自动行为的自定义实现,这一点有点弱。您甚至可以使用简洁的语法为自动属性指定属性。因此,除非您计划为大多数自动实现提供自定义实现,否则您仍然会从使用record.

  3. 您无法使用record struct,因为您被锁定在不支持 c#10 的 .net 版本中。

    好吧,在这种情况下不多说。


总而言之,record struct在一般情况下更好,老实说,struct从一开始就应该是默认的。

  • 我不认为总是使用“记录结构”有什么缺点,而且我喜欢不考虑太多,所以我总是会使用“记录结构”,直到遇到问题。 (2认同)