DLRを使用してC#のメソッドを参照する方法はありますか?
JavaScriptやPythonのような動的言語では、メソッドを引数として別のメソッドに簡単に渡すことができます。静的に型付けされた言語であるC#では、Delegate
多くのキャストを必要とする型を使用します。
public static void AddMethod(Delegate del)
{
// implementation
}
このメソッドを呼び出すときはいつでもキャストを使用します
static void Main(string[] args)
{
AddMethod(new Func<object, bool>(Test));
}
public static bool Test(object obj)
{
return true;
}
または、メソッド呼び出しを満たすために、数十のオーバーロードを定義する必要があります。
public static void AddMethod<TResult>(Func<TResult> method)
{
}
public static void AddMethod<T, TResult>(Func<T, TResult> method)
{
}
public static void AddMethod<T1, T2, TResult>(Func<T1, T2, TResult> method)
{
}
public static void AddMethod<T1, T2, T3, TResult>(Func<T1, T2, T3, TResult> method)
{
}
他のすべてのメソッドのプレースホルダーとして引数を定義するためのよりクリーンな方法はありますか?(私はここでMethodInfo
他のReflection
ものを避けようとしています)
私はこのようなことを試みていました:
public delegate dynamic DynamicDelegate(params dynamic[] args);
public static void AddMethod(DynamicDelegate method)
{
}
しかし、コンパイラは動的に宣言されたデリゲートに対して静的に型付けされたメソッドを受け入れていないようです!
他に何か考えはありますか?