我试图理解反思的机制。 我想将对象的属性与给定值进行比较。 现在,我希望能够知道(当然在运行时)两个对象是否具有可比性,而不是执行比较并捕获异常。
类似的东西:
public bool IsComparableWithProperty(string propertyName, object value)
{
return typeof(MyType).GetProperty(propertyName).PropertyType is IComparable<value.GetType()>
}
当然我知道这是无效的,因为在编译时必须知道泛型。 我想知道这种行为是否可以在C#中实现。
由于
答案 0 :(得分:3)
您可以使用MakeGenericType
使用值运行时类型实例化通用接口定义,并使用IsAssignableFrom
来检查兼容性。
public bool IsComparableWithProperty(string propertyName, object value)
{
return typeof(IComparable<>).MakeGenericType(value.GetType()).IsAssignableFrom(typeof(MyType).GetProperty(propertyName).PropertyType);
}