Property aus unbestimmtem Typen => dynamic?

XtremeCJ

Erfahrenes Mitglied
Hi

Ich habe ein object, das ein Array darstellen soll. Welchen Typen dieses Array hat, kann ich aber erst zur Laufzeit bestimmen.
Die Typen, die das Array haben kann, sind begrenzt, und alle Typen haben eine Property die in jedem Typen vorhanden ist. Diese Property benötige ich. Allerdings sind die Typen aus einem Framework, und sie erben von keiner Basisklasse und implementieren kein Interface [ich spreche von den Vertex-Typen aus dem XNA-Framework, aber das nur am Rande].
Kann ich auf solch eine Property mit dem dynamic-Keyword aus .NET 4 zugreifen?

Ich dachte, dass mit .NET 4 das dynamic-Keyword helfen würde, da hier der Typ erst zur Laufzeit bestimmt wird, aber ich trotzdem im Code schon auf Properties verweisen kann. Ein Kollege meinte aber, dass dynamic wohl nicht dafür da wäre. Entweder, er versteht mich falsch, oder ich habe den Artikel von Chris Burrow falsch verstanden.

Alternativ könnte ich fragen, ob das jeweilige Objekt ein bestimmter Typ ist und dann boxen oder casten, aber das ist so viel Code [mindestens 10 Zeilen :O] den ich verhindern möchte.



Zum besseren Verständnis gibt es hier noch etwas Code. Zu beachten ist wie gesagt, dass ich in meinem Fall nicht die structs selbst definiere, sondern diese aus einem Framework kommen.

Code:
    struct Typ1
    {
        public int IntWert; // wird in beiden Typen verwendet
        public string Uhrzeit;
    }

    struct Typ2
    {
        public int IntWert; // wird in beiden Typen verwendet
        public string Datum;
    }

    class Test
    {
        bool b;
        object Array;
        public Test()
        {
            b = false;
            switch (b)
            {
                case true:
                    this.Array = new Typ1[]{new Typ1(){ IntWert = 1, Uhrzeit = "jetzt" }};
                    // Array füllen
                    break;
                case false:
                    this.Array = new Typ2[]{new Typ2(){ IntWert = 2, Datum = "heute" }};
                    // Array füllen
                    break;
            }

            Console.WriteLine(this.Array[0].IntWert.ToString());
            //                                ^^    den will ich
        }
    }

//EDIT

Ich kenne schon einige andere Möglichkeiten, mein Ziel zu erreichen. Ich würde nur gerne wissen, ob es mit dynamic aus .NET 4 geht, oder wofür dynamic dann gedacht ist. Reflection, casten/boxen und Extensions hab ich schon zur Auswahl. Aber mir geht es um dynamic ^_^
 
Zuletzt bearbeitet:
Ich denke das dir hier Reflection weiterhelfen wird.

Hier kannst du auf den Type des Object ein GetProperties() machen und erhältst so eine LIste aller Properties die unterstützt werden. Dann gibt es ein type.InvokeMember mit ner Menge Überladungen mit denen du die Properties setzen/lesen und auch Methoden ausführen kannst
 
Danke Master. Siehe Edit im ersten Post ;-) mir geht es nur um das dynamic in .NET 4. Ist das nicht genau für sowas da?
 
Das heißt, das hier wäre das, was ich suche,

Code:
dynamic arrObj = this.Array[0];
Console.WriteLine(arrObj.IntWert.ToString());

wobei ich bei arrObj kein IntelliSense erwarten kann, da das Objekt und damit die zugehörigen Werte erst zur Laufzeit gelesen werden. Habe ich das richtig verstanden?
 

Neue Beiträge

Zurück