In 这个问题 https://stackoverflow.com/questions/5399719/how-to-select-multiple-values-after-using-max-in-linq-to-objects我看到一个语法不熟悉的匿名类型表达式:
new { MyObjectID = g.Key, totalSum }
一开始我也这么认为(, totalSum }
) 是一个语法错误,因为未指定键,但它可以在 C#3.0 中编译并运行。我已在 LINQPad (2.x -> C#3) 中验证了此语法:
var y = ":-)";
var q = new { Y = y, y, y.Length, };
q.Dump();
Result:
(anon type) {
Y = ":-)",
y = ":-)",
Length = 3
}
该语法在规范中的何处定义?(答案应包括适用的参考文献和适当的摘录。)
而且,更主观(随意不回答),省略键是一个好的语法/快捷方式吗?到目前为止我还没有使用过它,因为我还不知道它,而且我不太迷恋那个语法糖。
7.6.10.6 匿名对象创建表达式
成员声明符可以缩写
一个简单的名字(§7.5.2),一个成员
访问(§7.5.4)或基本访问
(第 7.6.8 节)。这称为投影
初始化器,是 a 的简写
声明和赋值给
同名的财产。
具体来说,成员声明者
表格
identifier expr . identifier
正好等于
分别如下:
identifer = identifier identifier = expr . identifier
因此,在投影中
标识符选择的初始化器
值和字段或者
其值为的属性
分配的。直观地看,投影
初始化器项目不仅仅是一个值,
还有值的名称。
(第 181 页)
简单来说,这表示如果您自己不提供标识符,编译器将选择表达式的“最后一个”成员的标识符作为默认值。
至于它是好还是坏......好吧,我会避免这样做,以排除其他不知道这条捷径的人感到困惑的可能性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)