c# 在运行时检查两个对象是否可比较

c# check at runtime if two objects are comparable

我正在尝试了解反射机制。 我想将对象的 属性 与给定值进行比较。 现在,我不想执行比较并捕获异常,而是希望能够知道(当然是在运行时)这两个对象是否具有可比性。

类似于:

public bool IsComparableWithProperty(string propertyName, object value)
{
    return typeof(MyType).GetProperty(propertyName).PropertyType is IComparable<value.GetType()>        
}

当然我知道这是无效的,因为必须在编译时知道泛型。 我想知道这种行为是否可以在 C# 中实现。

谢谢

您可以使用 MakeGenericType 实例化具有值运行时类型的通用接口定义,并使用 IsAssignableFrom 检查兼容性。

public bool IsComparableWithProperty(string propertyName, object value)
{
    return typeof(IComparable<>).MakeGenericType(value.GetType()).IsAssignableFrom(typeof(MyType).GetProperty(propertyName).PropertyType);
}