有没有办法使用 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)
{
}
但是编译器似乎不接受动态声明的委托的静态类型方法!
还有其他想法吗?