c# - 内联属性初始化和尾随逗号

标签 c# compiler-construction syntax

void Main()
{
    Test t = new Test
    {
        A = "a",
        B = "b", // <-- erroneous trailing comma
    };
}

public class Test
{
    public string A { get; set; }
    public string B { get; set; }
}

我发现我的代码中有很多上面的错字。我总是很惊讶编译器似乎并不关心这个。为什么上面不是语法错误?它有任何实际有效的用途吗?

最佳答案

I find the above typo in my code quite a lot. I'm always suprised that the compiler doesn't seem to care about this. Why is the above not a syntax errror?

因为设计 C# 句法语法的人足够聪明,可以从其他不允许允许悬空逗号的编程语言中吸取教训,从而不断激怒那些语言的程序员。 p>

例如,ECMAScript (JavaScript) 最初在这个问题上保持沉默,因此一些实现(Firefox 中的 SpiderMonkey、Opera 的 JavaScript 等)自然允许它们,而其他实现(Microsoft 的 JScript)则不允许。因此,这导致了在这里和其他地方出现大量“为什么这在 IE 中不起作用”的问题。 (幸运的是,ECMAScript 5 明确允许它们,并且 IE8 最终在对象初始值设定项中支持它们——IE8 仍然以非标准方式处理数组初始值设定项,尽管公平地说,这些悬空逗号也仅在 ECMAScript 5 中得到澄清。)

您在 C# 语法的许多其他地方也可以找到它,例如枚举和数组初始值设定项。

关于c# - 内联属性初始化和尾随逗号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5245152/

相关文章:

c++ - 计算对C++的堆栈需求;如何获得可读的符号表?

rust - 如何在 Rust 结构中存储动态类型变量?

rust - Rust 中的符号 '&' 和星号 '*' 是什么意思?

c# - 如何在 C# 中为委托(delegate)类型的参数提供默认值?

c# - Gridview 页面索引仅在需要时更新

c# - 如何获取 Android 应用程序当前使用的堆大小?

C# 正则表达式 for/"在字符串末尾

compiler-construction - LL(1) 不能有歧义

list - 列表的标准定义

c# - 在字符串中搜索单词并反转字符串并保持大小写,而不使用内置函数