如何在多种方法中很好地使用try-catch

本文关键字:很好 try-catch 方法 | 更新日期: 2023-09-27 18:01:11

如果我的问题很愚蠢,很抱歉,但我有这样的代码:

public Object1 Method1(Object2 parameter)
{
    try
    {
        return this.linkToMyServer.Method1(parameter);
    }
    catch (Exception e)
    {
        this.Logger(e);
    }
    return null;
}
public Object3 Method2(Object4 parameter)
{
    try
    {
        return this.linkToMyServer.Method2(parameter);
    }
    catch (Exception e)
    {
        this.Logger(e);
    }
    return null;
}
/* ... */
public ObjectXX Method50(ObjectXY parameter)
{
    try
    {
        return this.linkToMyServer.Method50(parameter);
    }
    catch (Exception e)
    {
        this.Logger(e);
    }
    return null;
}

我想你看到了模式。有没有一种很好的方法,只有一个try-catch,并在这个try-catch中传递一个泛型方法?

我本能地会使用委托,但委托必须有相同的签名权?

提前谢谢。

谨致问候。

如何在多种方法中很好地使用try-catch

每当您看到这样的代码时,您都可以应用Template Method Pattern。

可能是这样的:

private TResult ExecuteWithExceptionHandling<TParam, TResult>(TParam parameter, Func<TParam, TResult> func)
{
    try
    {
        return func(parameter);
    }
    catch (Exception e)
    {
        this.Logger(e);
    }
    return default(TResult);
}
public Object1 Method1(Object2 parameter)
{
    return ExecuteWithExceptionHandling(parameter, linkToMyServer.Method1);
}
public Object3 Method2(Object4 parameter)
{
    return ExecuteWithExceptionHandling(parameter, linkToMyServer.Method2);
}

等等…

这可能对您有用。

public object BaseMethod(object[] userParameters,String FunctionName)
{
  try
   {    
          Type thisType = this.GetType();
          MethodInfo theMethod = thisType.GetMethod(FunctionName);
          object returnObj;
          returnObj = theMethod.Invoke(this, userParameters);
          return returnObj;
   }
   catch (Exception e)
   {
            this.Logger(e.InnerException);
    }
}

chocolatey开源git中可以找到这样一个集中处理的例子。

集中化使用两个静态公共方法FaultTolerance.try_catch_with_logging_exception进行——例如,该函数的用户需要编写以下内容:

巧克力包装服务.cs#L1073

有两个功能可以处理这种呼叫-

  1. Func参数

  2. Action参数

函数的其他参数由您决定是否要使用它们——一旦发生异常,它们可以调整或记录特定的错误消息。

(所有链接都提供了git历史中的绝对点,因此将来不会断开(。