.NET-将方法用作另一种方法的参数

时间:2019-09-26 11:32:44

标签: c# .net exception methods delegates

我想使用任何方法作为关心异常处理的方法的参数,例如:

public void Run(){
    string result1 = (string)HandlingMethod(GiveMeString, "Hello");
    int result2 = (int)HandlingMethod(CountSomething, 1, 2);
}

public object HandlingMethod(something method, manyDifferentTypesOfParameters...){
    try{
        return method(manyDifferentTypesOfParameters)
    }catch(Exception ex){
        ....
    }
}

public string GiveMeString(string text){
    return text + "World";
}

public int CountSomething(int n1, int n2){
    return n1 + n2;
}

是否可以在C#.Net中实现?

编辑:

我找到了这个解决方案,但是我不确定它是否安全。你觉得呢?

public class Program
    {
        public static void Main(string[] args)
        {
            string result1 = (string)Test(new Func<string,string>(TestPrint), "hello");
            int result2 = (int)Test(new Func<int, int, int>(TestPrint2), 4, 5);
            Console.WriteLine(result1);
            Console.WriteLine(result2);
        }

        public static object Test(Delegate method, params object[] args){
            Console.WriteLine("test test");
            return method.DynamicInvoke(args);
        }

        public static string TestPrint(string text){
           return text;
        }

        public static int TestPrint2(int n1, int n2){
            return n1 + n2 +1;
        }
    }

2 个答案:

答案 0 :(得分:0)

您可以在C#中传递委托。

有两种类型:

动作没有返回值,功能没有返回值。 我在这里看到的唯一问题是,在编写方法时需要指定委托的参数。当然,您可以将object []作为参数传递,但我认为这不是一个好主意

答案 1 :(得分:-2)

您可以为每种参数创建通用处理方法:

    public RetType HandlingMethod<P1Type,RetType>(Func<P1Type, RetType> method, P1Type p)
    {
        return method(p);
    }

    public RetType HandlingMethod<P1Type, P2Type, RetType>(Func<P1Type, P2Type, RetType> method, P1Type p1, P2Type p2)
    {
        return method(p1, p2);
    }