【发布时间】:2019-12-22 06:30:12
【问题描述】:
在匿名中声明属性的第三种语法是什么?
我正在阅读 CLR via C# 一书。我遇到以下摘录(1):
编译器支持 两种 附加语法,用于在匿名类型中声明属性 它可以从变量中推断出属性名称和类型:
String Name = "Grant";
DateTime dt = DateTime.Now;
// Anonymous type with two properties
// 1. String Name property set to Grant
// 2. Int32 Year property set to the year inside the dt
var o2 = new { Name, dt.Year };
虽然作者在前几段中介绍了以下用于创建匿名类型的语法 (2):
// Define a type, construct an instance of it, & initialize its properties
var o1 = new { Name = "Jeff", Year = 1964 };
因此,从上面的两个摘录中,我得出一个结论,即有一种语法用于在匿名类型中声明属性,另外还有两种语法。虽然书中介绍了其中一种附加语法,但我仍然没有看到书中介绍了第二种附加语法。
我听说过该语法和第一个附加语法,并在我的应用程序中使用过几次。但我不记得使用任何其他语法(这将是第三种)。
所有这一切让我相信实际上只有两种语法,而第三种(第二个附加)不存在。而上面的摘录只是书中的一个错误:作者应该写了
...支持
两个额外的...
另外,我在互联网上找不到关于第三种语法的任何内容。
那么,这只是一个错误还是我错过了这里的第三种语法?
【问题讨论】:
-
措辞不好。 “两个附加”语法实际上是一回事。它使用标识符作为属性的名称,并显示了其工作方式的两种变体。在一种情况下,标识符是一个局部变量 (
Name)。另一方面,标识符是从局部变量访问的属性(dt.Year但Year是相关标识符)。所以总共有两种语法(不是三种),一种是您为一个明确选择的属性名称分配一个值,另一种是您隐式使用现有标识符作为属性名称。 -
很高兴您能如此深入地学习这门语言。但是,您正在处理以简化规范中的语言的方式编写的书籍,因为实际上没有人会从规范中学习语言)。如果您想将其学习到那个级别,则需要查看规范本身,因为这是编写编译器的正式定义。尝试采取更实际的方法,而不是记住有 N 种做某事的方法。你可以“知道”很多,但做起来更重要。
-
@madreflection,我不会在这里记住任何东西。我想了解匿名类型初始化是否有另一种方法。非常感谢您的关注。我应该从你的观点中删除问题吗?
-
@madreflection,你会建议我如何学习基于 .net 的 Web 开发?我认为首先对 CLR 和 C# 有良好的理论知识很重要,不是吗?
-
正如我所提到的,采取更实际的方法。不要被困在“杂草丛中”。如果您错过了边缘情况或很少使用的功能,那并不重要。大多数 C# 程序员平均每天可能不会使用 20-30% 的语言(只是猜测),有些甚至更少。学会使用重要的部分并练习。然后每隔一段时间再添加一点。
标签: c# syntax anonymous-types