2016-07-05 50 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是类型对象(匿名)的参数之一。希望能帮助到你。