ich zur Zeit diese Art von Code haben:C#: Casting-Typen dynamisch
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
if (MainObject is SomeClassType1)
{
SomeClassType1 HelpObject = (SomeClassType1)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
else if (MainObject is SomeClassType2)
{
SomeClassType2 HelpObject = (SomeClassType2)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
}
Unter der Annahme, dass SomeClassType1 und SomeClassType2 den gleichen Satz von Eigenschaften, die ich zugewiesen werden soll (obwohl sie in anderen abweichen können), ist es möglich, MainObject dynamisch auf den entsprechenden Typ zu werfen und dann den Wert zuzuweisen, ohne den Code zu duplizieren? Diese ist, was ich am Ende sehen möchten:
private void FillObject(Object MainObject, Foo Arg1, Bar Arg2)
{
Type DynamicType = null;
if (MainObject is SomeClassType1)
{
DynamicType = typeof(SomeClassType1);
}
else if (MainObject is SomeClassType2)
{
DynamicType = typeof(SomeClassType2);
}
DynamicType HelpObject = (DynamicType)MainObject;
HelpObject.Property1 = Arg1;
HelpObject.Property2 = Arg2;
}
Und natürlich beschwert C# über nicht in der Lage DynamicType zu finden:
Der Typ oder Namespace-Name ‚DynamicType‘ konnte nicht gefunden werden (fehlt eine Verwendungsrichtlinie oder eine Baugruppenreferenz?)
Ist in C# 2.0 so etwas möglich? Wenn es unordentlicher ist als mein aktueller Code, sehe ich keinen Sinn darin, das zu tun, aber ich bin sehr daran interessiert, es herauszufinden. Vielen Dank!
EDIT: Nur um zu verdeutlichen, verstehe ich perfekt, dass die Implementierung einer Schnittstelle die am besten geeignete und wahrscheinlich richtige Lösung ist. Das heißt, ich bin mehr daran interessiert zu sehen, wie ich es ohne eine Schnittstelle implementieren könnte. Danke für tolle Antworten!
+1 Schön ... Ich hätte nicht gedacht, Generika zu verwenden, ich hätte einfach auf die Schnittstelle geworfen. –
Wie ist der generische Parameter T hier sinnvoll? Warum nicht einfach FillObject (IMyInterface mainobject, ...) verwenden? –
Ich bin neugierig - warum würden Sie Generika in diesem Fall und nicht nur private void FillObject (IMyInterface MainObject, Foo Arg1, Bar Arg2) verwenden? –