c#不带大括号的记录

Posted

技术标签:

【中文标题】c#不带大括号的记录【英文标题】:c# record without curly brackets 【发布时间】:2021-10-09 08:37:11 【问题描述】:

我偶然注意到以下代码可以编译(VS2022preview,c#10):

record R 
  public R() 
  int I;


record B : R; // no curly brackets !

(见:https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA+tJQCYAIBKuA3gLABQuluAAgMwEAUAlMQL7lW4CWAdgC64AkgG5y7MuUzQ8AIVwgCwoA===)

我很好奇如果没有 B 的大括号,这将如何工作?这是标准吗?

(如果我将记录更改为类,这将不起作用)

【问题讨论】:

docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 见record_body的定义 没有花括号的记录已经存在很长时间了:record Person(string Name, int Age) ? 谢谢@EmanuelVintilă 你能把这个作为答案发布吗 【参考方案1】:

在记录https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-9.0/records 的C# 语言规范中,record_body 子句被指定为

record_body
    : '' class_member_declaration* '' ';'?
    | ';'
    ;

因此,大括号可以省略。

【讨论】:

【参考方案2】:

https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/records

文档说的差不多。 C# 9.0 引入了许多此类更改。***程序文件,***命名空间声明等,他们摆脱了强制花括号。

【讨论】:

以上是关于c#不带大括号的记录的主要内容,如果未能解决你的问题,请参考以下文章

React:带大括号的参数与不带大括号的参数之间的区别

如何删除字典外部大括号或将其不带大括号附加到列表中?

在 ES6 中导入带或不带大括号 [重复]

for,if循环语句可以不带大括号吗?在可以不带的情况下我的循环有错误吗?

带大括号的类数组语句 - 目的是啥?

带大括号的 Java 负 bigdecimal 值