Dynamisches Casten??? mit GetType?



  • Hallo,

    ich hab ne ganz unsinige Idee;) Ich habe ein object array, und will jede wert mit dem BinaryWrite in eine stream haun:

    object[] DataFrame= new object[3];
    DataFrame[0] = true;
    DataFrame[1] = 45.34;
    DataFrame[2] = "HalloWelt";
    
    MemoryStream m_stream = new MemoryStream();
    BinaryWriter m_br = new BinaryWriter(m_stream);
    
    m_br.Write((DataFrame[0].GetType())DataFrame[0]);
    

    dann hab ich mir überlegt vll. can c# da dyniamisch casten in der "Write Methode" über die GEtType infos der object!;) Geht das irgendwie, was ich nich glaube 🤡



  • Wenn du schon so einen Quatsch machen willst, benutz doch einfach unsafe code.



  • Wenn du schon so einen Quatsch machen willst, benutz doch einfach unsafe code.



  • Was genau willst du?
    Wenn der Typ erst zur Laufzeit feststeht kann auch erst zur Laufzeit entschieden werden, welche Methode aufgerufen werden soll. Welche Methode aus einer Menge von überladenen Methoden aufgerufen werden soll wird in C# aber anhand des statischen Typs entschieden. Dein Pseudo-Cast macht also gar kein Sinn.

    Du kannt das ganze natürlich mit Type.Invoke machen. Deine letzte Zeile würde zu

    m_br.GetType().InvokeMember("Write", BindingFlags.InvokeMethod, null, m_br, DataFrame[0]);
    

    Die Frage die bleibt ist aber: Was willst du eigentlich erreichen? Es sieht nämlich tatsächlich einfach nach purem Quatsch aus.

    BTW, wer denkt sich eigentlich so absurde Namen, wie "m_br" aus?



  • Du könntest ein generisches interface definieren und dieses zur Laufzeit per Emit implementieren, instanzieren und verwenden. Die Instanzierung von Generics mit der Spezifikation des Typparameters zur Laufzeit via System.Type ist meines Wissens nach problemlos möglich. Die Antwort auf deine Frage ist aus meiner Sicht ein eindeutiges JA, aber wie schon die anderen gesagt haben ist jeder Ansatz so etwas zu realisieren totaler Schwachsinn. 😋

    MfG



  • ja es ist eig. auch quatsch... deswgen das 🤡 smily;)

    es geht darum das ich ein array aus objecten haben welche unterschiedliche typen haben können.. und ich die je nach typ in ein stream schreiben will

    ich könnte das ganze ja serialisieren.. aber das wäre zuviel overhead.

    könnte das ja mit switch case lösen.. aber ich dachte mir mal blöd den ansatz.. bin mit c# noch nich so bewandt;)



  • Wenn es Deine Klassen sind, spendiere ihnen ein Interface mit einer Routine "Save" und übergib den Stream.

    Spätestens wenn Du das wieder zurück wandeln willst, ist die Frage, ob der "Overhead" fürs Serialisieren wirklich noch entscheidend ist.



  • Das Problem liegt darin, das ich Objecte via remoting übers netz per HTTP jagen will.. und durchs serialisieren, können objecte rel. groß werden... und bei ner schlechten i-net verbindung könnte die datenübertragung schwach sein.. hier liegt mein problem;)



  • BorisDieKlinge schrieb:

    Das Problem liegt darin, das ich Objecte via remoting übers netz per HTTP jagen will.. und durchs serialisieren, können objecte rel. groß werden... und bei ner schlechten i-net verbindung könnte die datenübertragung schwach sein.. hier liegt mein problem;)

    Dann schreib doch lieber Custom Serializers für Deine Objekte... Definitiv besser als so eine "case switch" homebrew Lösung.



  • jepp das schau ich mir mal an..


Anmelden zum Antworten