当对象实现隐式运算符时,可以测试转换为PropertyInfo.PropertyType吗?

时间:2012-04-06 11:18:37

标签: c# reflection casting operator-keyword propertyinfo

我有一个特定类型的对象(SpecialImage),它将隐式运算符实现为另一个类型(Image)。

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 个答案:

答案 0 :(得分: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
}