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