在嵌套的try catch块中返回结果

时间:2014-01-29 07:54:01

标签: c# return try-catch

我正在实施一些表现计数器,我想知道你的意见。 问题是我应该声明响应并将其返回到try块之外,还是可以直接在try块中返回它。是否存在差异,如果是,则示例代码有效(如果有)。

最诚挚的问候,no9。

public string TestMethod(string document)
{
  try
  {
    WebService ws = new WebService();
    string response = null;
    var startTime = PerformanceCounter.GetPerformanceCounterStartTimeHandle();

    try
    {
      response = ws.InsertDocument(document);
    }
    catch (Exception ex)
    {
      PerformanceCounterHelper.Increment(PerformanceCounterEnum.NumberOfExternalWsCallsExceptionOnSec);
      throw;
    }
    finally
    {
      PerformanceCounterHelper.IncrementPerformanceCounterByElapsedTime(PerformanceCounterEnum.DurationOfExternalCallsInSec, startTime);
      PerformanceCounterHelper.Increment(PerformanceCounterEnum.NumberOfExternalCallsOnSec);
    }

    return response;
  }
  catch (Exception ex)
  {
    log.EventError(ex);
    throw new DocumentGeneralException();
  }
}

public string TestMethod(string document)
{
  try
  {
    WebService ws = new WebService();
    var startTime = PerformanceCounter.GetPerformanceCounterStartTimeHandle();

    try
    {
      return ws.InsertDocument(document);
    }
    catch (Exception ex)
    {
      PerformanceCounterHelper.Increment(PerformanceCounterEnum.NumberOfExternalWsCallsExceptionOnSec);
      throw;
    }
    finally
    {
      PerformanceCounterHelper.IncrementPerformanceCounterByElapsedTime(PerformanceCounterEnum.DurationOfExternalCallsInSec, startTime);
      PerformanceCounterHelper.Increment(PerformanceCounterEnum.NumberOfExternalCallsOnSec);
    }
  }
  catch (Exception ex)
  {
    log.EventError(ex);
    throw new DocumentGeneralException();
  }
}

1 个答案:

答案 0 :(得分:1)

只要由于没有退出而没有的区别(即它运行其他/不同的代码),那么代码是相同的。实际上,在IL级别,从try / catch内部到ret 非法,因此编译器所做的一件事就是完成您所做的事情:引入本地,在try / catch中分配本地,然后在 outside try / catch时返回该值。

基本上,选择最简单,最方便阅读的内容。在你的情况下,我会说"第一个"。