是否可以在C#中使用Func或Delegate调用具有相同返回类型但具有可变参数的“n”函数

时间:2011-04-01 13:39:28

标签: c# exception-handling delegates

这是我的情景。 我有10个方法的类,这些方法是原子的,最多只有10行代码。

所以我在思考,而不是处理每个函数中的异常,是否有可能创建一个委托(?不确定这里是否正确的单词)

所谓的包装函数将执行这些原子函数并处理它们的异常,从而允许我集中处理异常处理。

使用delegate或Func在C#中是否可以实现,或者可能有另一种集中错误处理的方法,我可能错过了?

提前致谢

3 个答案:

答案 0 :(得分:1)

是的,有这样的代表

private delegate MyReturnType MyDelegate(params Object[] a);

但它不是类型安全的。

答案 1 :(得分:1)

我不确定这是否对您有用,但您可以使用“中间洞”模式或构建抽象类。

我试图做类似的事情,我希望每次调用给定的方法时都会发生某些Pre和Post条件。以同样的方式,您可以将Exception逻辑放在那里,而不是Pre和Post条件。看看这个post

希望它有所帮助。

答案 2 :(得分:1)

是的,这是一个代码示例

using System;

namespace ConsoleApp
{
    class Example {
        public void Run() {
            catchy(crashA); // Calling defined functions
            catchy(crashB);
            catchy(()=> {
                throw new ArgumentException("Anonymous function...");
            });
        }
        void crashA() {
            //...
            throw new ArgumentException("another error");
        }
        void crashB() {
            //...
            throw new ArgumentException("another error");
        }
        void catchy(Action action) {
            try {
                action();
            } catch (Exception ex) {
                Console.WriteLine(ex);
                // do something
            }
        }
    }

    class MainClass
    {

        public static void Main (string[] args)
        {
            new Example().Run();
            Console.ReadLine();
            Console.WriteLine ("Hello World!");
        }
    }
}