我想声明一个以另一个方法作为参数的方法,这样调用方就可以写:
myClass.LoadCode(SomeClass.AnyMethod);
在方法内部,我直接查看方法声明和它的IL代码,因此我实际上只对传递参数的方法
属性(类型为System.Reflection.MethodInfo
)感兴趣。
我试过:
public Task LoadCode(Delegate method)
{
return LoadCode(method, method.Method); // Internal method
}
但这要求调用方执行以下操作:
compiler.LoadCode(new Func<int, int, bool>(SomeClass.AMethodThatTakesTwoIntsAndReturnsBoolean));
我也试过:
public Task<T> LoadCode<T>(T method)
where T : Delegate
{
return LoadCode(method, method.Method);
}
无济于事,
compiler.LoadCode<Func<int, int, bool>>(SomeClass.AMethodThatTakesTwoIntsAndReturnsBoolean);
也没好多少。
如何声明一个以另一个方法(或一个非类型化委托)作为参数的方法,而不必显式指定其类型/参数列表?
只是一个使用字符串的变通方法
using System;
using System.Linq;
namespace ConsoleApp14
{
class Program
{
static void Main(string[] args)
{
LoadCode(typeof(SomeClass), nameof(SomeClass.SomeMethod));
}
static void LoadCode(Type type, string methodName)
{
var methods = type.GetMethods().Where(x => x.Name == methodName).ToList();
if (methods.Count == 0)
{
// not a method
}
}
}
public class SomeClass
{
public void SomeMethod()
{
}
public void SomeMethod(object o)
{
}
}
}