代码之家  ›  专栏  ›  技术社区  ›  DxCK

正在检查“object[]args”是否满足委托实例?

  •  6
  • DxCK  · 技术社区  · 16 年前

    我有以下方法签名:

    public static void InvokeInFuture(Delegate method, params object[] args)
    {
        // ...
    }
    

    委托和参数保存到集合中,以备将来调用。

    是否有任何方法可以在不调用arguments数组的情况下检查arguments数组是否满足委托要求?

    谢谢。

    编辑: 感谢反射实现,但我正在寻找一种内置的方法来实现这一点。我不想重新投资这个轮子,.NET框架已经在delegate.dynamicinvoke()的某个地方实现了这种检查,它的实现处理了所有那些只有微软开发人员才能想到的疯狂的特殊情况,并且通过了单元测试和QA。有没有办法使用这个内置的实现?

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  6
  •   Steve Guidi    16 年前

    可以使用反射获取委托的方法签名,如下所示。

    using System;
    using System.Reflection;
    
    bool ValidateDelegate(Delegate method, params object[] args)
    {
        ParameterInfo[] parameters = method.Method.GetParameters();
        if (parameters.Length != args.Length) { return false; }
    
        for (int i = 0; i < parameters.Length; ++i)
        {
            if (parameters[i].ParameterType.IsValueType && args[i] == null ||
                !parameters[i].ParameterType.IsAssignableFrom(args[i].GetType()))
            {
                return false;
            }
        }
    
        return true;
    }
    
        2
  •  1
  •   GrayWizardx    16 年前

    看起来像 framework 基本上是这样做的,用一些消除逻辑来确保它保存一个已经评估过的列表。

        3
  •  1
  •   Community Mohan Dere    9 年前

    请参见“根据委托检查MethodInfo” Checking a MethodInfo against a delegate