2016-08-08 47 views
0

Ich habe eine Liste von Objekten verschiedener Typen, die ich je nach Typ mit verschiedenen Sachen machen muss. Insbesondere teilen zwei der Typen eine Methode, die ich für beide verwenden möchte. Was ich zur Zeit versucht, ist dies:Dynamisch Objekt mit Reflektion konvertieren

if (foo is Type01 || foo is Type02) { 
    Type tempType = foo.GetType(); 
    outList.Add((foo as tempType).ToOutType()); 
    return outList; 
} 

Dies ist jedoch nicht funktioniert, da der Compiler anscheinend nicht der Typ dynamisch verwenden können. Gibt es eine Möglichkeit, dies zu erreichen, oder muss ich die beiden Optionen in verschiedene if-Klauseln einfügen?

+1

Try-Aktivator verwenden – icbytes

+0

Hat das Verfahren auf beiden Arten das gleiche tun? Können Sie die Typen von einer gemeinsamen Basis ableiten, die diese Methode hat (zumindest als virtuelle Methode)? Oder stelle die Methode in eine Schnittstelle, die beide Klassen implementieren? – ChrisF

Antwort

2

Wenn Sie beide Type01 steuern und Type02, Schnittstellen zu Rettung:

interface ISupportToOutType 
{ 
    OutType ToOutType(); 
} 

class Type01 : ISupportToOutType 
{   
} 

class Type02 : ISupportToOutType 
{   
} 

var toOutType = foo as ISupportToOutType; 
if(toOutType != null) 
{ 
    outList.Add(toOutType.ToOutType()); 
}