【问题标题】:Declaring an anonymous type member with a simple name用简单的名字声明一个匿名类型成员
【发布时间】:2014-10-27 15:25:25
【问题描述】:

当你尝试编译这个时:

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 的相关问题仅提供成员分配成员访问的示例。

【问题讨论】:

    标签: c# anonymous-types


    【解决方案1】:

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

    var amount = 10;
    var whatever = "hello";
    
    var newType = { amount, whatever }
    

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

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

    【讨论】:

    • 其实简单的名字是来自C# spec的特定名词。引用:A simple-name consists of an identifier, optionally followed by a type argument list: simple-name: identifier type-argument-listopt 第 158 页,来自 C# 5.0 规范的 7.6.2 段。 MSDN 和语言规范有点不同步。 Specification 给出了更深层次的定义
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多