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 ein object nur, dass der C# - compiler behandelt Sie anders und Farmen alle Zugriffe auf dynamic 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/...

InformationsquelleAutor joeriks | 2011-01-26
Schreibe einen Kommentar