2012-04-06 12 views
0

暗黙の演算子と別のタイプ(Image)を実装する特定のタイプのオブジェクト(SpecialImage)があります。オブジェクトが暗黙の演算子を実装している場合、PropertyInfo.PropertyTypeへのキャストをテストできますか?

SpecialImageは、Imageから派生しています。ただし、以下は、オペレータによって可能です:

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

私は反射とImageオブジェクトによってを通してループしていますプロパティを持つオブジェクトを持っている:

は、そのオブジェクトがキャスト可能であるかどうかを確認することが可能です値を設定しようとする前にinfo.PropertyTypeに?

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); 
} 

答えて

1

あなたは私たちがこれらのクラスを持っている場合は

class T1 
{ 
} 

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

この

ような何かを試みることができるザ・私たちは、私がこれを発見し、実際にこの作品

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

を使用することができます。 __without__クラスを変更する必要があり、例えばIConvertibleを変換するためのより良い方法はありませんか? – Ropstah

+1

私が知っているわけではありません。あなたはそれを整理するヘルパーメソッドでそのコードをラップすることができます。 http://stackoverflow.com/questions/2075471/implicit-version-of-isassignablefromおよびhttp://stackoverflow.com/questions/2224266/how-to-tell-if-type-a-is-implicitly-convertibleを参照してください。詳細は、-to-type-bを参照してください。 – Phil

関連する問題