2016-07-05 21 views
-1

這是經常可以看到傳入的事情多餘的值或屬性,如MVC5中的對象是什麼?

@Html.ValidationSummary(true, "", new { @class = "text-danger" })

什麼叫做new {...}一部分?它是一個對象嗎?它看起來不像一個對象,因爲新對象{...}會導致錯誤。

我使用了很多,但我並沒有深入瞭解new {...}語法是什麼。

+0

C#中的所有東西都是一個'object',所以在技術上,是的。除此之外,你實際上是在你的例子中創建一個匿名對象。 –

回答

3

這是一個anonymous type對象 - C#而不是MVC5的一個特性。編譯器創建一個具有隻讀屬性的匿名類型,匹配initalizer中使用的名稱和類型。在運行時,將創建此類型的實例,並且MVC使用反射對其屬性進行迭代。

+0

值得注意的是,在特定情況下,它是一個匿名對象,但是,您也可以使用相同的語法實例化已定義的對象。 –

+0

@cFrozenDeath你可以嗎?你可以發佈一個例子或鏈接到如何?我能想到的最接近的是通過'new [] {...}進行數組實例化# –

+0

@ScottChamberlain我特別提到了數組實例化:)雖然 –

0

這是一個匿名對象。

在這裏看到:

https://msdn.microsoft.com/en-us/library/bb397696.aspx

+0

鏈接只有答案是不鼓勵的。請編輯你的答案,並添加一些信息 –

+1

@cFrozenDeath我認爲這是一個完整的答案。如果死亡的所有環節仍然100%回答問題。鏈接只是提供supplmental信息。 –

+0

@ScottChamberlain我不同意你的看法。並非每一個'new {...}'都會創建一個匿名對象。充其量只是部分回答 –

1

這裏添加更多的信息,匿名類型是使用新的關鍵字和一些只讀屬性創建的類型。

var AnonType = new {propertyName1 = "property", propertyName2 = "Prop"}; 

屬性的數據類型是基於您插入例如如果您分配的int變成整數等屬性的數據,決定。這些是隻讀屬性,所以你不會改變它們的值。

enter image description here

你的情況的ValidationSummary是HtmlHelper類的擴展方法,和採取各種過載。這裏的htmlAttribute是類型對象(匿名)的參數之一。希望能幫助到你。