2016-07-05 18 views
-1

Es ist üblich, zusätzliche Werte oder Attribute in Dinge wieWas ist das in MVC5, ein Objekt?

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

geben, um zu sehen Was ist der new {...} Teil genannt? Ist es ein Objekt? Es scheint kein Objekt zu sein, da das neue Objekt {...} Fehler verursacht.

Ich benutze dies eine Menge, aber ich habe nicht wirklich ein tiefes Verständnis davon, was die new {...} Syntax Dong ist.

+0

Absolut alles in C# ist ein 'Objekt', also technisch, ja, ist es. Abgesehen davon erstellen Sie in Ihrem Beispiel ein anonymes Objekt. –

Antwort

3

Es ist ein anonymous type Objekt - ein Merkmal von C# anstelle von MVC5. Der Compiler erstellt einen anonymen Typ mit schreibgeschützten Eigenschaften, die den im Initializer verwendeten Namen und Typen entsprechen. Zur Laufzeit wird eine Instanz dieses Typs erstellt, und MVC iteriert über seine Eigenschaften mittels Reflektion.

+0

Es ist erwähnenswert, dass es sich in diesem speziellen Fall um ein anonymes Objekt handelt. Sie können jedoch auch definierte Objekte mit derselben Syntax instanziieren. –

+0

@cFrozenDeath Sie können? Kannst du ein Beispiel oder einen Link zu wie? Der nächste, den ich mir vorstellen kann, ist Array-Instanziierung über 'new [] {...}' –

+0

@ScottChamberlain Ich bezog mich speziell auf Array-Instanziierung :) Es könnte aber auch einen anderen Fall geben –

0

Es ist ein anonymer Gegenstand.

Siehe hier:

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

+0

Link-only-Antworten werden abgeraten. Bitte bearbeiten Sie Ihre Antwort und fügen Sie einige Informationen aus dem Post –

+1

@cFrozenDeath Ich denke, es ist eine vollständige Antwort. Wenn alle Links tot sind, beantwortet es immer noch zu 100% die Frage. Der Link liefert nur ergänzende Informationen. –

+0

@ScottChamberlain Ich stimme dir nicht zu. Nicht jedes einzelne 'neue {...}' erstellt ein anonymes Objekt. Im besten Fall ist eine Teilantwort –

1

hier weitere Informationen Hinzufügen von Anonyme Typen sind die Typen mit neuen Keywords und einige Nur-Lese-Eigenschaften erstellt.

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

Datentyp der Eigenschaften werden auf der Grundlage der Daten entschieden Sie einfügen, zum Beispiel, wenn Sie int auf die Eigenschaft zuweisen es integer und so weiter wird. Dies sind schreibgeschützte Eigenschaften, so dass Sie den Wert nicht ändern.

enter image description here

in Ihrem Fall Validation ist eine Erweiterungsmethode auf Htmlhelper Klasse und nimmt verschiedene Überlastungen. Hier ist htmlAttribute einer der Parameter des Typs object (Anonymous). Ich hoffe es hilft.