如何编写一个函数来调用另一个函数并捕获一些异常?

Hem*_*ant 2 .net c# exception

我有一系列具有不同参数签名的函数:

public void function1 (string s1, string s1, string s3, string s4) {...}
public void function2 (int i1, int i2, string s3, string s4) {...}    
public void function3 (int i1, string s2, int i3, string s4) {...}
.
.
etc //some 30 odd functions
Run Code Online (Sandbox Code Playgroud)

调用每个函数可能会抛出一组异常,如TimeoutException,CommunicationException等(是的,这些是WCF代理函数)

现在我必须将这些调用包装在try catch块中,但DRY原则说我写错了很多相同的try catch块:

public void Interfacefunction1 (...) {
    try {
        function1 (...);
    }
    catch (TimeoutException) {
        taskResult.Success = false;
        taskResult.Message = Resources.ServerConnectionBroke;
    }            
    catch (CommunicationException) {
        taskResult.Success = false;
        taskResult.Message = Resources.CommunicationFailed;
    }
}

//and...

public void Interfacefunction2 (...) {
    try {
        function2 (...);
    }
    catch (TimeoutException) {
        taskResult.Success = false;
        taskResult.Message = Resources.ServerConnectionBroke;
    }            
    catch (CommunicationException) {
        taskResult.Success = false;
        taskResult.Message = Resources.CommunicationFailed;
    }
}
//etc
Run Code Online (Sandbox Code Playgroud)

有没有办法编写一个函数来调用这些函数并在抛出时捕获异常?

编辑:

我无法控制将调用它们的接口函数序列.这些所有功能都暴露给用户(另一个程序员),用户可以按照自己喜欢的顺序调用任何一个,两个或多个.我只需要在EACH操作失败的情况下报告成功和错误消息.(请参阅更新的代码段).

Ric*_*lay 8

你可以使用lambdas:

CatchCommonExceptions(() => function1(...));

private void CatchCommonExceptions(Action action)
{
    try
    {
        action ();
    }
    catch (TimeoutException) {
        taskResult.Success = false;
        taskResult.Message = Resources.ServerConnectionBroke;
    }
    catch (CommunicationException)
    {
        taskResult.Success = false;
        taskResult.Message = Resources.CommunicationFailed;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于那些返回值的人,你可以有一个Func <T>重载.

编辑:您可以在这里查看完整的来源.