簡體   English   中英

使用帶有new的{…}實例化C#中的匿名類型

[英]using {…} with new to instantiate anonymous type in C#

我最近正在Smarterer進行C#的技能測試。

我遇到一個問題,該問題表明可以使用以下哪項在C#中創建匿名類型(類似)。

我選擇了“這些都不選”(我不記得其他選擇了,因為基於時間的測試只有10秒)。

一旦給出答案,它就會說{...}是正確的答案。

所以我猜是這樣的:

var someVariableName = new {...}; 創建一個匿名類型。

我很驚訝地看到了這一點,並對其進行了調整,但未能找到與此類似的東西。

問:在使用{...}關鍵字或運算符實例化時,有什么方法可以創建匿名類型而不聲明其類型? 還是問題的正確答案不正確?

如果我沒看錯,可以使用dynamic關鍵字來完成。

http://msdn.microsoft.com/zh-CN/library/bb397696.aspx是MS文檔,引用:

您可以通過將new運算符與對象初始化程序一起使用來創建匿名類型。 有關對象初始化程序的更多信息,請參見對象和集合初始化程序(C#編程指南)。 下面的示例顯示了一個匿名類型,該類型使用名為Amount和Message的兩個屬性進行了初始化。

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

這不是動態類型,而是“匿名”的特定靜態類型,即沒有給它命名。 但是,編譯器已經/將要使用,因此v仍然是強類型的,您將獲得智能感知,並且v.FieldIDontHave將給出編譯器錯誤。

使用關鍵字var

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

在評論中花了點時間之后,我可以確認一些細節。

Smarterer的“答案”指出,僅{ MyProperty = 2 }是匿名類型的有效語法,只有一半正確。 語法是必需的,但需要與new關鍵字結合使用。

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

在VS 2012中嘗試以下操作將無法編譯:

// Try and make an anonymous type without new.
var anon = { Name = "Adam", Age = 29 };

// Try and declare an anonymous type prior to "newing" one up.
{ Name = "Adam", Age = 29 };

同樣,沒有其他站點的確切問題和可用答案,很難在該站點上提供問題和后續答案的上下文。 希望這足以關閉它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM