声明匿名类型成员用一个简单的名字
问题描述:
当您尝试进行编译:声明匿名类型成员用一个简单的名字
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的相关问题导致成员分配只有成员访问的例子。
答
据我所知,simple name
声明是这样的:
var amount = 10;
var whatever = "hello";
var newType = { amount, whatever }
,它会自动创建一个匿名类型等于:
var newType = { amount = amount, whatever = whatever }
事实上,简单的名字是从特定任期[ 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