可以在对象实现隐式运算符时测试对 PropertyInfo.PropertyType 的强制转换

本文关键字:PropertyType PropertyInfo 转换 测试 对象 实现 运算符 | 更新日期: 2023-09-27 18:30:20

我有一个某种类型的对象(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);
}

可以在对象实现隐式运算符时测试对 PropertyInfo.PropertyType 的强制转换

你可以尝试这样的事情

如果我们有这些类

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
}