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

时间:2017-08-31 15:39:28

标签: c# reflection types comparison runtime

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

类似的东西:

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

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

由于

1 个答案:

答案 0 :(得分:3)

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

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