使用{...}和new来实例化C#中的匿名类型

时间:2014-11-24 12:13:09

标签: c# variables using anonymous-types

我最近在Smarterer尝试了C#的技能测试。

我遇到了一个问题,其中说明了以下哪些内容可用于在C#中创建匿名类型(类似)。

我选择了#34;其中没有一个" (我不记得其他选项,因为基于时间的测试只有10秒)。

我回答后说{...}是正确答案。

所以我想这样的事情:

var someVariableName = new {...};创建一个匿名类型。

我很惊讶地看到这一点并且有点笨拙,但却找不到类似的东西。

问题:在使用{...}关键字或运算符进行实例化时,是否可以创建匿名类型而不声明其类型?或问题的正确答案不是"正确"?

如果我没有错,可以使用dynamic关键字来完成。

3 个答案:

答案 0 :(得分:5)

http://msdn.microsoft.com/en-GB/library/bb397696.aspx是MS文档,引用:

  

您可以通过将new运算符与a一起使用来创建匿名类型   对象初始化器。有关对象初始值设定项的更多信息,   请参阅对象和集合初始化程序(C#编程指南)。该   以下示例显示了使用两个初始化的匿名类型   名为Amount和Message的属性。

C#
var v = new { Amount = 108, Message = "Hello" };

这不是动态类型,这是一种匿名的特定静态类型,即没有给它起一个名字。但是编译器有/将,因此v仍然是强类型的,你得到intellisense而v.FieldIDontHave会给编译器错误。

答案 1 :(得分:1)

使用关键字var

var x = new {value = 3, name = "lol"};
Console.WriteLine(x.value); //prints 3
Console.WriteLine(x.name); //prints lol

答案 2 :(得分:1)

在评论中花时间到这个问题的底部后,我可以确认一些细节。

The Smarterer&#34;回答&#34;声明只有{ MyProperty = 2 }是匿名类型的有效语法只有一半是正确的。语法是必需的,但与<{1}}关键字一起使用

new

在VS 2012中尝试以下操作将无法编译:

var anon = new { Name = "Adam", Age = 29 };

再次没有来自其他网站的确切问题和可用答案,很难为此网站上的问题和后续答案提供背景信息。希望这足以将其关闭。