gpt4 book ai didi

c# - 没有显式键的匿名类型语法 (`new { identifier }` )?

转载 作者:太空狗 更新时间:2023-10-30 00:21:26 27 4
gpt4 key购买 nike

this question我看到一个语法不熟悉的匿名类型表达式:

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();

结果:

(anon type) {
Y = ":-)",
y = ":-)",
Length = 3
}

此语法在规范中的何处定义?(答案应包括适用的引用资料和适当的摘录。)

而且,更主观(随意不回答),省略键是一个好的语法/捷径吗?到目前为止,我还没有使用过它,因为我不知道它,而且我不太喜欢这种语法糖。

最佳答案

7.6.10.6 匿名对象创建表达式

A member declarator can be abbreviated to a simple name (§7.5.2), a member access (§7.5.4) or a base access (§7.6.8). This is called a projection initializer and is shorthand for a declaration of and assignment to a property with the same name. Specifically, member declarators of the forms

identifier                           expr . identifier

are precisely equivalent to the following, respectively:

identifer = identifier               identifier = expr . identifier

Thus, in a projection initializer the identifier selects both the value and the field or property to which the value is assigned. Intuitively, a projection initializer projects not just a value, but also the name of the value.

(第 181 页)

简单来说,这就是说,如果您自己不提供标识符,编译器将默认选择表达式“最后”成员的标识符。

至于是好是坏……好吧,我会避免这样做正是为了排除其他不知道这个快捷方式的人感到困惑的可能性。

关于c# - 没有显式键的匿名类型语法 (`new { identifier }` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5400212/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com