首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c#在运行时检查两个对象是否具有可比性

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

Stack Overflow用户
提问于 2017-08-31 15:39:27
回答 1查看 375关注 0票数 1

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

类似于:

代码语言:javascript
代码运行次数:0
运行
复制
public bool IsComparableWithProperty(string propertyName, object value)
{
    return typeof(MyType).GetProperty(propertyName).PropertyType is IComparable<value.GetType()>        
}

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

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-31 15:47:30

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

代码语言:javascript
代码运行次数:0
运行
复制
public bool IsComparableWithProperty(string propertyName, object value)
{
    return typeof(IComparable<>).MakeGenericType(value.GetType()).IsAssignableFrom(typeof(MyType).GetProperty(propertyName).PropertyType);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45985364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档