2012-07-11 46 views
0

已经注意到了一个小错误在我的C#代码(4号线的终点):对象初始化器逗号查询

Domain.Models.Patient patient = new Domain.Models.Patient 
{ 
    PatientId = patientId, 
    StudyID = studyId, 
}; 

我没有得到任何编译错误或运行时错误 - 当出现在一个错误的逗号研究结束。

这是为什么,它真的很重要吗?

回答

2

这并不重要,它也不会导致任何编译时错误。对其他人来说也是如此,就像枚举一样。可能会显示其他项目可能会添加到该对象。

enum Test 
    { 
     Value1, 
     Value2, 
     //Value3, May be to comment out easily 
    } 

发现一个Reference - C# Language Specification

(第24.2节)像标准C++,C#允许尾随逗号在 阵列初始化函数的末尾。该语法提供了从这样的列表中删除成员的灵活性,并且简化了这种列表的机器生成 。

而且

(部分 - 21.1) - C#允许在一个枚举体尾随逗号,就像它允许一个在 的阵列初始化

+0

如果我没有记错,这个语言便利功能被添加到.net 3.5中。 – 2012-07-11 12:10:31

+0

@ChrisSinclair,我认为尾随逗号在.net 2.0中用于枚举,但[对象初始值设定项在3.0中引入](http://weblogs.asp.net/dwahlin/archive/2007/09/09/c- 3-0-features-object-initializers.aspx) – Habib 2012-07-11 12:20:21

+0

感谢这个答案,很好奇为什么这是允许的。 – 2012-07-11 12:43:13

0

最后逗号被编译器忽略。

Domain.Models.Patient patient = new Domain.Models.Patient 
{ 
    PatientId = patientId, 
    StudyID = studyId, // this comma is ignored by compiler. 
}; 
0

当您在初始化程序中复制/粘贴,重新排列,注释/时,这非常方便。如果您必须在进程中添加或删除逗号,则不必担心。