我在试着理解反思的机制。我想将对象的属性与给定的值进行比较。现在,我想知道(当然在运行时)这两个对象是否具有可比性,而不是执行比较和捕获异常。
类似于:
public bool IsComparableWithProperty(string propertyName, object value)
{
return typeof(MyType).GetProperty(propertyName).PropertyType is IComparable<value.GetType()>
}
当然,我知道这是无效的,因为泛型必须在编译时知道。我想知道这种行为是否可以在C#中实现。
谢谢
发布于 2017-08-31 07:47:30
可以使用MakeGenericType
使用值运行时类型实例化泛型接口定义,并使用IsAssignableFrom
检查兼容性。
public bool IsComparableWithProperty(string propertyName, object value)
{
return typeof(IComparable<>).MakeGenericType(value.GetType()).IsAssignableFrom(typeof(MyType).GetProperty(propertyName).PropertyType);
}
https://stackoverflow.com/questions/45985364
复制