6

次のメソッド シグネチャがあります。

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

デリゲートと引数は、後で呼び出すためにコレクションに保存されます。

引数配列を呼び出さずにデリゲートの要件を満たしているかどうかを確認する方法はありますか?

ありがとう。

編集: リフレクションの実装に感謝しますが、これを行うための組み込みの方法を探しています。車輪を元に戻したくありません。.NET Framework には、既にこのチェックが Delegate.DynamicInvoke() 内のどこかに実装されており、Microsoft の開発者だけが考えることができるクレイジーな特殊なケースをすべて処理する実装があり、単体テストと QA に合格しています。この組み込み実装を使用する方法はありますか?

ありがとう。

4

1 に答える 1

6

次のように、リフレクションを使用してデリゲートのメソッド シグネチャを取得できます。

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;
}
于 2009-12-11T20:22:26.840 に答える