使用简单名称声明匿名类型成员

Fra*_*Rem 12 c# anonymous-types

当您尝试编译时:

var car = new { "toyota", 5000 };
Run Code Online (Sandbox Code Playgroud)

您将收到编译器错误"无效的匿名类型成员声明符.必须使用成员分配,简单名称或成员访问声明匿名类型成员." 因为编译器无法从相应的表达式推断属性的名称.这完全有道理.

令我好奇的是,错误消息暗示了三种声明类型成员的有效方法.成员分配和成员访问是显而易见的:

// member assignment
var v = new { Amount = 108, Message = "Hello" };

// member access
var productQuery = 
    from prod in products
    select new { prod.Color, prod.Price };
Run Code Online (Sandbox Code Playgroud)

简单名称声明的例子是什么?

谷歌搜索和SO上的相关问题仅导致成员分配成员访问的示例.

Han*_*ney 13

据我所知,simple name声明是这样的:

var amount = 10;
var whatever = "hello";

var newType = { amount, whatever }
Run Code Online (Sandbox Code Playgroud)

这将自动创建一个等于的匿名类型:

var newType = { amount = amount, whatever = whatever }
Run Code Online (Sandbox Code Playgroud)

  • 事实上,简单名称是[C#spec]中的特定术语(http://msdn.microsoft.com/en-us/library/aa691350(v = vs.71).aspx).Quote:`一个简单名称由一个标识符组成,可选地后跟一个类型参数列表:simple-name:identifier type-argument-listopt`第158页,来自C#5.0规范的段落**7.6.2**.MSDN和语言规范有点不同步.[规范](http://www.microsoft.com/en-us/download/confirmation.aspx?id=7029)给出了更深入的定义 (5认同)