首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GetMethod重载返回null

GetMethod重载返回null
EN

Stack Overflow用户
提问于 2015-04-30 09:57:02
回答 1查看 259关注 0票数 1

我想从特定的接口获得一个方法,但是它可以在多个接口中。我写这段代码:

代码语言:javascript
复制
private static Expression<Func<T, T, int>> CreateCompareTo<TProperty>(MemberExpression expression, Expression<Func<T, T, int>> result) where TProperty : IComparable<TProperty>, IComparable
{
    var methodInfo = typeof(TProperty).GetMethod("CompareTo", new[] { typeof(IComparable<TProperty>), typeof(IComparable) });
    ...

MSDN

表示要获取的参数的数量、顺序和类型的Type对象数组。

因此,我预计它将通过IComparable<T>搜索方法,如果没有找到,它将在非泛型IComparable中搜索。但它没有。好吧,现在我重写它:

代码语言:javascript
复制
private static Expression<Func<T, T, int>> CreateCompareTo<TProperty>(MemberExpression expression, Expression<Func<T, T, int>> result) where TProperty : IComparable<TProperty>, IComparable
{
    Type t = typeof(TProperty);
    var methodInfo = t.GetMethod("CompareTo", new[] { typeof(IComparable<TProperty>) }) ?? t.GetMethod("CompareTo", new[] { typeof(IComparable) });
    ...

现在起作用了。

为什么第一种选择不起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-30 09:59:37

GetMethod("CompareTo", new[] { typeof(IComparable<TProperty>), typeof(IComparable)}) 因此,我预计它将通过IComparable搜索方法,如果没有找到,将在非泛型IComparable中搜索它。

不,它寻找一个具有签名CompareTo(IComparable<TProperty>, IComparable)的方法。

这也在 documentation中。

搜索指定的公共方法,其参数与指定的参数类型匹配。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29964586

复制
相关文章

相似问题

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