为什么C#4.0允许在匿名对象初始化代码中使用尾随逗号?可能重复:内联属性初始化和尾随逗号适用于我的一个项目(C#4.0,VisualStudio2010),我无意中发现代码varobj=new{field1="Test",field2=3,}编译并执行正常没有任何错误甚至警告,并且工作完全相同varobj=new{field1="Test",field2=3}为什么编译器容忍第一个示例中的尾随逗号?这是编译器中的错误还是这种行为有某种目的?谢谢要确定它是否是编译器中的错误,您需要查看C#规范-在本例中为第7.6.10.6节,它明确允许它:anonymous-object-creation-expression:newanonymous-object-initializeranonymous-object-initializer:{member-declarator-listopt}{member-declarator-list,}所以不,这不是编译器错误。该语言是有意设计的以允许它。现在,为什么语言是这样设计的——我相信这使得在编码时添加和删除值变得更容易。例如:varobj=new{field1="test",field2=3,};可以变成varobj=new{field2=3,};或varobj=new{field1="test",field2=3,field3=4,};只需添加或删除一行。这使得维护代码更简单,并且更容易编写代码生成器。请注意,这与数组初始化器、集合初始化器和枚举一致://这些都是有效的string[]array={"hello",};Listlist=newList{"你好",};enumFoo{Bar,}尾随逗号很好的原因之一是来源比较。如果您更新源代码并使用源代码比较工具,源代码比较工具将仅显示1行已更改(新字段3。没有尾随逗号,源代码比较将显示2行已更改,因为您必须在3之后添加逗号.varobj=new{field1="Test",field2=3,}varobj=new{field1="Test",field2=3,field3="New",}我想,为了更容易删除最后一个字段。像这样做不会造成语法上的歧义,所以它只会让生活更轻松。以上是C#学习教程:WhydoesC#4.0toleratetrailingcommasinanonymousobjectinitializationcode?分享全部内容,如果有帮助对大家有用,需要了解更多C#学习教程,希望大家多多关注-本文收集自网络,不代表立场,如涉及侵权,请点右联系管理员删除,如需转载请注明出处:
