首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内联属性初始化和尾随逗号

问内联属性初始化和尾随逗号
EN

Stack Overflow用户
提问于 2011-03-09 19:30:52
回答 3查看 1.5K关注 0票数 19
代码语言:javascript
复制
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; }
}

我发现上面的拼写错误在我的代码中相当多。我总是感到惊讶的是编译器似乎并不关心这一点。为什么上面的不是语法错误?它有没有真正有效的用途?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-09 19:49:07

我发现我的代码中有很多上面的拼写错误。我总是感到惊讶的是编译器似乎并不关心这一点。为什么上面的不是语法错误?

因为设计C#语法的人足够聪明,能够从其他不允许使用逗号的编程语言中吸取经验教训,这让使用这些语言的程序员一直感到恼火。

例如,ECMAScript ( JavaScript )最初对这个问题保持沉默,因此很自然地实现了一些实现(火狐中的SpiderMonkey、Opera的JavaScript等)。而其他浏览器(微软的JScript)则不允许,所以这导致了一系列的“为什么这个在IE中不能工作”的问题在这里和其他地方。(幸运的是,ECMAScript 5明确地允许它们,并且IE8最终在对象初始化器中支持它们-- IE8仍然以一种非标准的方式对待数组初始化器,尽管公平地说,那些初始化器的逗号也只是在ECMAScript 5中才被澄清。)

在C#语法中的许多其他地方也可以找到这一点,比如枚举和数组初始化器。

票数 19
EN

Stack Overflow用户

发布于 2011-03-09 19:35:23

这不是一个错误,因为它很方便。要添加到初始化器,您只需添加一行,而不是在一行中添加逗号并输入整个新行。

这实际上在其他语言的列表/数组初始化中也很常见(想到了Python、Ruby、Haskell )。

票数 6
EN

Stack Overflow用户

发布于 2011-03-09 19:35:47

我认为它可以简化自动代码生成。

在这种情况下,您可以使用某种程序创建代码,如下所示

代码语言:javascript
复制
...
for( char c = 'A'; c < 'Z'; c++ )
{
   AddToOutput( c + " = \"+c.ToLower()+"\"," );
}
...

并且不必关心删除最后一个尾随逗号。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5245152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档