Можно ли проверить приведение к PropertyInfo.PropertyType, когда объект реализует неявный оператор?

У меня есть объект определенного типа (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);
}

person Ropstah    schedule 06.04.2012    source источник


Ответы (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
}
person Phil    schedule 06.04.2012
comment
Я нашел это, и это действительно работает. Нет ли лучшего способа без изменения класса и, например, преобразования IConvertible? - person Ropstah; 06.04.2012
comment
Не то, что я знаю о. Вы можете обернуть этот код во вспомогательный метод, чтобы убрать его. См. stackoverflow.com/questions/2075471/ и stackoverflow.com/questions/2224266/ для получения дополнительной информации. - person Phil; 06.04.2012