如何在多种方法中使用try catch?

时间:2014-05-02 07:32:39

标签: c# .net try-catch

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

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

我认为你看到的模式。有没有一种很好的方法只有一次尝试catch并在这个try catch中传递泛型方法?

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

提前致谢。

问候。

2 个答案:

答案 0 :(得分:9)

每当您看到这样的代码时,您都可以应用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);
}

等等......

答案 1 :(得分:1)

这可能对您有用。

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

    }
}