Wie unbox ein C# - Objekt zum dynamischen Typ

Ich versuche, so etwas zu tun:

void someMethod(TypeA object) { ... }

void someMethod(TypeB object) { ... }

object getObject()
{
    if (...) return new TypeA();
    else return new TypeB();
}

object obj = getObject();
(obj.GetType()) obj;  //won't compile
someMethod(obj);

Offensichtlich bin ich verwirrt hier. Ich weiß, ich könnte diese Arbeit machen, indem Sie einfach das schreiben aus einer bedingten Anweisung --

if (obj.GetType() == typeof(TypeA)) obj = (TypeA)obj;
else if (obj.GetType() == typeof(TypeB)) obj = (TypeB)obj;

-- aber gibt es nicht ein Weg, dies zu tun bei der Laufzeit?

BEARBEITEN
Ich bin damit einverstanden, es scheint, wie Sie vielleicht nicht die beste design-Auswahl, hier ist also der Zusammenhang. Der Punkt der oben genannten code-Repository Basis-Klasse für Mongo DB. Ich will, dass es in der Lage sein, um die Handhabung der verschiedenen Arten von Tabellen. So, someMethod() ist eigentlich entfernen; und Typ a und TypeB sind ObjectID und Guid; der code unten, ist Teil der Typ-Agnostiker entfernen - Methode, nimmt die ID als Zeichenfolge; und getObject() ist eine Methode zum Parsen der ID-parameter.

  • Sie verbindet eine Art T mit dem runtime-Typ-Informationen zugeordnet: typeof(T). Sie sind nicht die gleiche Sache und nicht als Ersatz für jede andere.
  • Es gibt wahrscheinlich bessere design-Entscheidungen, aber Sie ließ das eigentliche Ziel, den code aus deinem post. Vielleicht könnten wir Ihnen eine bessere und völlig andere Art des Schreibens, die Lösung für Ihr problem, wenn Sie lassen Sie uns wissen, was Sie versuchen zu erreichen, mit diesem code.
  • Woll, ich kenne den Unterschied, ich wollte nur verdeutlichen, was ich versuche zu tun.
  • Fisher, fügte der Kontext. Ich nehme an, das wäre vielleicht eine Frage für die "Code Review" zum Austausch, aber wenn Sie Ideen haben, würde ich glücklich sein, um es zu öffnen, als eine separate Frage.
  • Haben Sie einen Blick auf Massiven. Finden Sie eine Menge guter Ideen gibt.
InformationsquelleAutor McGarnagle | 2012-04-10
Schreibe einen Kommentar