2012-04-06 18 views
0

Ich habe ein Objekt eines bestimmten Typs (SpecialImage), der einen impliziten Operator zu einem anderen Typ (Image) implementiert.Kann eine Umwandlung in PropertyInfo.PropertyType getestet werden, wenn das Objekt den impliziten Operator implementiert?

does nicht abgeleitet von Image. Jedoch ist folgendes möglich durch den Betreiber:

var someImage = new Image(); 
(SpecialImage)someImage; 

Ich habe ein Objekt mit Eigenschaften, die ich durch Reflexion Schleifen bin und ein Image Objekt:

Ist es möglich, zu überprüfen, ob das Objekt gießbar ist zu info.PropertyType vor dem Versuch, den Wert zu setzen?

var someImage = new Image(); 

foreach(PropertyInfo info in someOjbect.GetType().GetProperties()) { 
    //info.PropertyType == typeof(SomeImage); 

    //Is it possible to check if the object is castable to 
    //info.PropertyType before trying to set the value? 
    info.SetValue(someObject, someImage, null); 
} 

Antwort

1

Man könnte so etwas wie dieses

versuchen Wenn wir diese Klassen

class T1 
{ 
} 

class T2 
{ 
    public static implicit operator T1(T2 item) { return new T1(); } 
} 

Das haben wir

if(typeof(T2).GetMethods().Where (
    t => t.IsStatic && t.IsSpecialName && 
     t.ReturnType == typeof(T1) && t.Name=="op_Implicit").Any()) 
{ 
    // do stuff 
} 
+0

Ich fand dies und in der Tat das funktioniert nutzen könnten. Gibt es keinen schöneren Weg, ohne die Klasse zu ändern und zum Beispiel IConvertible zu konvertieren? – Ropstah

+1

Nicht, dass ich weiß. Sie könnten diesen Code in eine Hilfsmethode einbetten, um sie zu entfernen. Siehe http://stackoverflow.com/questions/2075471/implicit-version-of-isassignablefrom und http://stackoverflow.com/questions/2224266/how-to-tell-if-type-a-isimplicitly-convertible -to-type-b für weitere Informationen. – Phil