Nehmen wir an, ich habe eine abstrakte Basisklasse für Polymorphismus und ich möchte eine Methode schreiben, um einen abgeleiteten Typ in einen anderen zu konvertieren, aber ich kenne keinen der abgeleiteten Typen zum Zeitpunkt der Kompilierung . Ich glaube, Reflexion wäre der richtige Weg, um dies zu lösen, aber ich bin mir nicht sicher, was der richtige Weg wäre, um es zu implementieren. Hier bin ich gerade festgefahren.Konvertieren zwischen unbekannten Typen zur Laufzeit
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//bc is currently DerivedClass1 which implements IConvertable
//type is currently DerivedClass2
//Trying to convert DerivedClass1 to DerivedClass2
return (BaseClass)ChangeType(bc, type);
}
Diese Methode wird DerivedClass1 zu DerivedClass2 konvertieren, aber ich hatte das IConvertable Schnittstelle für DerivedClass1 zur Umsetzung für sie zu arbeiten, die ich mit unglücklich bin, weil es mit 15 unnötigen Methoden kommt ich zu implementieren.
Gibt es einen eleganteren Weg, dies zu lösen, etwas, das näher an der Kompilierzeit Casting ist? Eine, bei der die Methode entweder erfolgreich sein oder eine Laufzeitausnahme auslösen würde, abhängig davon, ob DerivedClass1 einen Darstellungsklasse-2-Operator hatte. Etwas mehr wie:
Public Static BaseClass ConvertTo(BaseClass bc, Type type) {
//First down cast it to bc, then sideways cast it to type.
return (type)((bc.GetType())bc)
}
Sie werden also die Arbeit in einer benutzerdefinierten Konvertierung ausführen, und Sie möchten das einfach finden und über Reflektion ausführen? –
Sind Sie sicher, dass Sie nicht versuchen, Kopien ähnlicher Strukturen zu haben? Automapper könnte nützlicher sein, was auch immer es ist, versuchen Sie todo – Arjang