首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据委托检查MethodInfo

根据委托检查MethodInfo
EN

Stack Overflow用户
提问于 2010-02-08 19:03:43
回答 1查看 1.7K关注 0票数 8

如何确定MethodInfo是否适合不同的委派类型?

代码语言:javascript
复制
bool IsMyDelegate(MethodInfo method);

编辑:我得到了一个MethodInfo对象,我想知道它是否适合委托接口。除了显而易见的

代码语言:javascript
复制
    private bool IsValidationDelegate(MethodInfo method)
    {
        var result = false;
        var parameters = method.GetParameters();
        if (parameters.Length == 2 &&
            parameters[0].ParameterType == typeof(MyObject1) &&
            parameters[1].ParameterType == typeof(MyObject2) &&
            method.ReturnType == typeof(bool))
        {
            result = true;
        }
        else
        {
            m_Log.Error("Validator:IsValidationDelegate", "Method [...] is not a ValidationDelegate.");
        }
        return result;
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-02-08 19:17:49

如果method是静态方法:

代码语言:javascript
复制
bool isMyDelegate =
  (Delegate.CreateDelegate(typeof(MyDelegate), method, false) != null);

如果method是一个实例方法:

代码语言:javascript
复制
bool isMyDelegate =
  (Delegate.CreateDelegate(typeof(MyDelegate), someObj, method, false) != null)

(不幸的是,在这种情况下,您需要一个实例,因为Delegate.CreateDelegate将尝试绑定一个委托实例,即使在这种情况下,我们只关心它是否可以创建委托。)

在这两种情况下,技巧基本上都是要求.NET从MethodInfo创建所需类型的委托,但如果方法具有错误的签名,则返回null,而不是抛出异常。然后,针对null的测试将告诉我们委托是否具有正确的签名。

请注意,因为这实际上是尝试创建委托,所以它还将为您处理所有委托方差规则(例如,当方法返回类型兼容但与委托返回类型不完全相同时)。

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

https://stackoverflow.com/questions/2221085

复制
相关文章

相似问题

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