C# System.Object.Type direkt übergeben?

Zespire

Lieutenant
Registriert
März 2007
Beiträge
857
Servus mir hat sich gerade eine kleine Frage gestellt bei dir mir wohl die richtigen Wörter für Google fehlen...

Geht um folgendes Stück Code.

C#:
public static System.Object Deserialize(System.Object baseObject, string path)
    {
        XmlSerializer serializer = new XmlSerializer(baseObject.GetType());
    }

Die Frage dazu ist recht einfach gibt es so etwas wie System.Object.Type oder eine Möglichkeit den type direkt zu übergeben ohne vorher eine Instanz zu haben und GetType zu nutzen?

C#:
public static System.Object Deserialize(System.Object.Type objectType,string path)
    {
        XmlSerializer serializer = new XmlSerializer(objectType);
    }
 
Danke und wenn ich es dann Aufrufe scheint es über typeof() zu laufen zumindest meckert der Compiler nicht.
 
Vielleicht ist Generics das richtige Stichwort.
C#:
public static T Deserialize<T>(string path)
{
    XmlSerializer serializer = new XmlSerializer(typeof(T));
    using (TextReader reader = new StreamReader(path))
    {
        return (T)xmlSerializer.Deserialize(reader);
    }
}
Aufruf dann mit:
C#:
MySerializedClass foobar = Deserialize<MySerializedClass>("foobar.xml");
Der Code ist ungetestet.
 
  • Gefällt mir
Reaktionen: Zespire
Hab das ganze jetzt mit System.Type gelöst

C#:
traitMods.Add(XmlInternalSerializer.DeSerialize(typeof(Trait), xmlFiles[i].bytes) as Trait);

Deins liest sich jedoch schöner gibt es noch mehr Vorteile?
 
Du kannst T mit constraints auf bestimmte Typen usw. einschränken. Ggf mal Doku zu Generics durchlesen
 
  • Gefällt mir
Reaktionen: Zespire
Danke habe das schon öffters gesehen wen man zb Listen erstellt mit List<> oder in Unity bei GetComponent<> hab selbst aber bis Heute bei ähnlichen Aufgaben ein Interface genutzt.

"By using generics, programmers can implement generic algorithms that work on collections of different types, can be customized, and are type safe and easier to read."

Gut das ich gefragt habe viel mehr gelernt als erwartet :)
 
Zuletzt bearbeitet:
Zurück
Oben