4 c# syntax types anonymous c#-3.0
在这个问题中,我看到了一个匿名类型表达式,其语法不熟悉:
new { MyObjectID = g.Key, totalSum }
Run Code Online (Sandbox Code Playgroud)
起初我认为它, totalSum }是一个语法错误,因为没有指定键,但它编译并在C#3.0中工作.我在LINQPad(2.x - > C#3)中验证了这种语法:
var y = ":-)";
var q = new { Y = y, y, y.Length, };
q.Dump();
Run Code Online (Sandbox Code Playgroud)
结果:
(anon type) {
Y = ":-)",
y = ":-)",
Length = 3
}
Run Code Online (Sandbox Code Playgroud)
规范中的哪个地方定义了这种语法?(答案应包括适用的参考文献和适当的摘录.)
而且,更主观(随意不回答),省略键是一个很好的语法/捷径?到目前为止,我还没有使用它,我不知道它,我不是很迷恋那个语法糖.
成员声明符可以缩写为简单名称(第7.5.2节),成员访问(第7.5.4节)或基本访问(第7.6.8节).这称为投影初始值设定项,是对具有相同名称的属性进行声明和赋值的简写.具体来说,是表单的成员声明者
identifier expr . identifier
Run Code Online (Sandbox Code Playgroud)
分别完全等同于以下内容:
identifer = identifier identifier = expr . identifier
Run Code Online (Sandbox Code Playgroud)
因此,在投影初始化器中,标识符选择值和分配值的字段或属性.直观地说,投影初始化器不仅投影值,还投射值的名称.
(第181页)
简单来说,如果您不自己提供标识符,编译器将选择表达式"last"成员的标识符作为默认值.
至于它是好还是坏......好吧,我要避免这样做,以排除那些不了解这条捷径的人混淆的可能性.