为什么这个 c# 代码片段是合法的?

2024-03-31

愚蠢的问题,但是为什么下面的行会编译?

int[] i = new int[] {1,};

正如您所看到的,我没有输入第二个元素并在那里留下了逗号。即使您希望它不会编译,仍然可以编译。


我想是因为 ECMA 334 标准说:

array-initializer:
    { variable-initializer-list(opt) }
    { variable-initializer-list , }
variable-initializer-list:
    variable-initializer
    variable-initializer-list , variable-initializer
variable-initializer:
    expression
    array-initializer

如您所见,允许使用尾随逗号:

{ variable-initializer-list , }
                            ↑

附:以获得一个好的答案(即使许多用户已经指出了这一事实)。 :)

尾随逗号可用于简化自动代码生成器的实现(生成器可以避免测试初始化​​程序中的最后一个元素,因为它应该在没有尾随逗号的情况下编写)和使用预处理器指令的条件数组初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么这个 c# 代码片段是合法的? 的相关文章

随机推荐

  • 如何在 ColdFusion 中用空/零字节填充字符串以及 MacOS 和 Windows 上的 CF 之间的差异

    我无法理解如何用空字节填充 CF 中的字符串 在Java中我会这样做 String ZeroPad for int i 0 i lt 32 i ZeroPad ZeroPad 0 String strKey strUsername strP
  • 使用 Unity 和 MVVM 在 WPF 中保留用户凭据

    尽管我在 Windows 应用程序中做了类似的事情 但我在这方面的表现却很糟糕 我正在开发 WPF 应用程序 Prism Unity MVVM 并且刚刚完成登录视图 一旦根据 SQL Server 中的表验证了用户的凭据 我将执行以下操作
  • 如何将数据从选项卡栏控制器传递到其选项卡之一?

    我在故事板中设置了一个 UITabBarController 我想从选项卡栏控制器传递数据字典以在适当的子选项卡中使用 这是一个标准的 UIViewController 这似乎是一个很长的问题要回答 但我真的不知道从哪里开始 我正在寻找最简
  • 如果 cellForRowAtIndexPath 未调用,如何更改 UITableViewCell 外观

    我的应用程序中有一个表格视图 表视图单元格具有带有图案图像的背景 表格视图内容正在发生变化 有时只有两三个单元格包含内容信息 表格视图会自动将其他单元格添加到屏幕底部 问题是这些单元格的背景很清晰 但我想让背景与其他单元格相同 带有图案图像
  • 使用可选参数来实现向后兼容性是一个好主意吗?

    我想知道如何通过使用可选参数来提供向后兼容性 在我的程序中 我有一个带有函数的接口 该函数在整个程序以及许多单元测试中使用 对于某些新功能 必须将布尔值传递到此函数中 如果设置为 则会改变其行为false 如果你通过true 您将得到与以前
  • R - 将数据帧转换为时间序列[重复]

    这个问题在这里已经有答案了 我有谷歌股票数据 它有两列 日期 每日数据 和 收盘价 即 Google 收盘指数 Date Close 10 11 2013 871 99 10 10 2013 868 24 10 9 2013 855 86
  • 仅使用 .wt 文件恢复 MongoDB

    我的电脑崩溃了 我可以使用 wt 文件取回我的数据吗 旧 MongoDB 中的 wt 文件 您可以恢复您的 wt从 Atlas Backup 作为恢复文件夹解压或解压 下载的 WiredTiger 文件到本地 MongoDB 首先 备份您的
  • 如何为 LinearLayout 制作渐变背景?

    我想知道 在java 而不是xml 中为LinearLayout制作渐变背景的最佳方法是什么 有任何想法吗 Thanks
  • 从类内重定向到操作的正确方法?

    背景 我有一个项目分为 Webform 和 MVC 谢天谢地 正在转向 MVC 我有一个LoginManager包含一个类IRedirectionManager类 并根据用户属性 已通过身份验证 密码过期 尚未接受条款 调用重定向管理器上的
  • 在javascript中将字符串分割成句子

    目前我正在开发一个将长列分成短列的应用程序 为此 我将整个文本拆分为单词 但目前我的正则表达式也拆分了数字 我所做的是这样的 str This is a long string with some numbers 125 000 55 an
  • 声明 C++ 不可变类的惯用方式

    所以我有一些相当广泛的功能代码 其中主要数据类型是不可变的结构 类 我声明不变性的方式是通过将成员变量和任何方法设置为 const 来 实际上是不可变的 struct RockSolid const float x const float
  • 如何通过 Java SDK 使用 AWS 端口转发会话

    我正在使用开始一个会话AWSSimpleSystemsManagementAsync如下 Map
  • VS2008 声明数组时出现预期常量表达式错误,但在 GCC 中此代码没有错误

    我有以下功能 void someFun int ar const int size int newAr size do something 我在这一行得到三个错误 Error 1 error C2057 expected constant
  • 调用 .disconnect() 后如何重新连接

    问题 发布手册后如何重新连接客户端到服务器 disconnect 在我当前的项目中 当用户从会话注销时 我需要断开客户端与服务器的连接 我做了一个socket disconnect 才能成功断开连接 服务器从会话中删除了用户 一段时间后 用
  • 如何开始使用 Selenium 2?

    我到处读到我们should现在使用 Selenium 2 如果我的理解正确的话 WebDriver 我不是在谈论 Selenium IDE 它确实很容易使用 我已经阅读了 Selenium 网站上的文档 该文档声称不完整 因为 Seleni
  • Visual Studio 扩展未知错误 - 无法推送或获取任何内容

    当我尝试通过 Visual Studio 的 Git 扩展将任何内容推送到我的 bitbucket 存储库时出现错误 Error encountered while pushing branch to the remote reposito
  • QTableView 中的搜索/查找功能

    我有一个 QWidget 里面有一个 QTableView 我需要在表格的第一列上有查找功能 因此当我单击 Ctrl F 时 会弹出一个查找对话框 class Widget QWidget def init self md parent N
  • 如何在c中增加数组

    我试图使用变量作为增量来增加 int 数组 但它会引发错误 int array MAXSIZE int n fill the array with some numbers some other code 这里的情况是 一旦我分析了前 n
  • Javascript:了解原型链

    我创建了一个简单的类 如下所示 var Class function Class prototype testObj a 2 b 3 现在如果我这样做console log Class testObj I get undefined 但是如
  • 为什么这个 c# 代码片段是合法的?

    愚蠢的问题 但是为什么下面的行会编译 int i new int 1 正如您所看到的 我没有输入第二个元素并在那里留下了逗号 即使您希望它不会编译 仍然可以编译 我想是因为 ECMA 334 标准说 array initializer va