Можно ли проверить приведение к 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);
}
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
}