2014-10-27 109 views
12

当您尝试进行编译:声明匿名类型成员用一个简单的名字

var car = new { "toyota", 5000 }; 

你将得到编译器错误“无效的匿名类型成员声明匿名类型成员必须与成员分配声明。 ,简单的名称或成员访问权限。“,因为编译器无法从相应的表达式中推断出属性的名称。 这是完全意义上的。

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

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

// member access 
var productQuery = 
    from prod in products 
    select new { prod.Color, prod.Price }; 

什么是一个简单的声明的例子吗?

谷歌搜索和SO的相关问题导致成员分配只有成员访问的例子。

回答

12

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

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

var newType = { amount, whatever } 

,它会自动创建一个匿名类型等于:

var newType = { amount = amount, whatever = whatever } 
+5

事实上,简单的名字是从特定任期[ 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)给出了更深入的定义 – 2014-10-27 15:34:53

相关问题