Array von dynamischen | ExpandoObject | komprimiert mit initialisieren syntax
Ich versuche zu verwenden DynamicObject in c#, und ich brauchte ein array von dynamischen:
var d = new dynamic[];
welche gut funktioniert.
EDIT : Siehe ExpandoObject unten.
Aber ich mag auch füllen Sie das array mit einigen Daten mit dem komprimierten initialisieren neuer syntax:
var d = new dynamic[] {
new {
Name = "Some",
Number = 1010
},
new {
Name = "Other",
Number = 2010
}
}
Aber in diesem Fall alle Objekte, bekommt der nicht-dynamischen Typ "object" und einer Schleife durch die Elemente, die mir eine Ausnahme:
foreach (dynamic item in d)
{
@item.Name
@item.Number
}
Fehler : "object" enthält keine definition für 'Name'. Ich glaube, dass ich gerade initialisiert die array-Elemente der falsche Weg. So fügen Sie dynamische Objekte statt?
EDIT: Neue Inhalte:
Merke ich "Dynamik" nicht die Fähigkeit haben, dynamisch Eigenschaften hinzufügen.
Ich besser werden mit ExpandoObject, das macht alle Elemente in einem internen Wörterbuch als Eigenschaften. Aber leider ExpandoObject scheint das nicht zu unterstützen, diese schöne komprimierte erstellen, der syntax und der compiler beschwert sich:
var d = new ExpandoObject[]{
new ExpandoObject(){
Name="Nnn",
Number=1080
}
}
So, die Antwort könnte nur sein : es ist nicht möglich.
- Sind Sie sicher, dass Sie nicht wollen einfach nur ein array von einem anonymen Typ?
- Ist dies in ASP.NET MVC3?
- Beachten Sie, dass ein
dynamic
ist einobject
nur, dass der C# - compiler behandelt Sie anders und Farmen alle Zugriffe aufdynamic
aus dem DLR - Die foreach ist mit Razor ja. Und anonyme Art - ja, wenn es funktioniert, bekomme ich den gleichen Fehler - das ist, wenn ich versuchte dynamischen statt 🙂
- Haben Sie versucht, einen expliziten cast auf jedes element des Arrays? Es ist ein wenig böse aber es könnte funktionieren.
- ja - danke - siehe meine Bemerkung zu Snowbear.
- Ich dont bekommen diesen Fehler. Der erste code-block sollte gut funktionieren. Es ist es etwas sehr speziell auf Ihre Rahmen? Wie es funktioniert nicht in Rasierer anzeigen von ASP.NET MVC? Im normalen code, C# ist auch gut so.
- Wie man fake-Objekt-Initialisierer-syntax für Expandos finden Sie unter stackoverflow.com/questions/4216309/..., stackoverflow.com/questions/5910331/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich komme ein bisschen spät, aber hier ist was ich gefunden habe dazu :
wenn ich kann nicht initialisieren ExpandoObject, wie etwa die Initialisierung der es mit einem dynamischen Typ ?
so, ich habe die folgende Erweiterung Methode
Ich weiß, es ist weit von ideal, aber es ist das beste was ich erreichen konnte für jetzt, es funktioniert wie folgt :
someQueryable.Select(ReusableProjection().ToExpando())
, woReusableProjection
gibt diese:Expression<Func<SomeType, dynamic>>
Ich hoffe, Sie tun nicht wirklich brauchen, Dynamik
2[System.String,System.String][] but in my real code a GetType returns <>f__AnonymousType1
2[System.String,System.String][]. (Das ist auch das, was sich unterscheidet, wenn ich eine ToString-Methode auf das Objekt). Jetzt nicht, dass 1 / 0 tun für mein Objekt?Den open-source-framework Impromptu-Schnittstelle hat eine komprimiert Initialisierung syntax, das funktioniert mit ExpandoObject.