2015-12-10 113 views
0

我試圖創建一個內聯創建的對象,但我想進入電影我創建內部類的如下因素的屬性:公共屬性創建動態對象

object x = new { text = "one", text2 = "two" }; 

if (x.text == "one") //can not acces this item in the object 
{ 
    //do somthing 
} 

我知道我可以通過創建,使這項工作一個dynamic對象,但然後我需要真正確保我拼寫正確的屬性,我不希望這一點。 這段代碼發生了什麼是我無法訪問裏面的屬性,我怎麼能做到這一點,而不使用動態對象,並有機會misstype屬性名稱?

+2

'對象x = {新文本= 「一個」,文本2 = 「2」};' - >'變種X = {新文本= 「一個」,文本2 = 「two」};' –

+0

您正在尋找[匿名類型](https://msdn.microsoft.com/en-us/library/bb397696.aspx) –

+0

難道是因爲使用'dynamic'而不是'var'在這裏是將該對象傳遞給函數的範圍之外? – Philippe

回答

8

使用var作爲變量的類型,而不是:

var x = new { text = "one", text2 = "two" }; 

Console.WriteLine(x.text); // Fine, and suggested by Intellisense 
Console.WriteLine(x.text1); // Compile-time error 

注意,這不是一個真正的「動態對象」中的屬性名稱和類型都在編譯時聞名。所發生的一切就是C#編譯器自動爲您創建一個類型,其中包含相關屬性(以及構造函數,並覆蓋了EqualsGetHashCodeToString)。這種類型的名稱是C#難言,但var讓你聲明該類型的局部變量,允許編譯時檢查等

var功能被稱爲implicitly-typed local variables

new { ... }功能被稱爲anonymous types

0

嘗試這種情況:

`dynamic test = new { text = "one", text2 = "two" }; 
var result = test.text;`