提问者:小点点

应该使用什么类型的参数来将方法作为输入?


我想声明一个以另一个方法作为参数的方法,这样调用方就可以写:

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);

也没好多少。

如何声明一个以另一个方法(或一个非类型化委托)作为参数的方法,而不必显式指定其类型/参数列表?


共1个答案

匿名用户

只是一个使用字符串的变通方法

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)
        {

        }
    }
}