2017-04-05 21 views
-1

说我有如下的作品的东西的方法答:
在C#中返回一个值之前执行的方法

methodA() { 
    while(some condition) { 
     do computation... 
     if(something 1) { 
      do computation... 
      if(some condition) { 
       return result; 
      } 
     } 
     else if(something 2) { 
      do computation... 
      if(some other condition) { 
       return result; 
      } 
     } 
    } 
    return something; 
} 

这种方法既可在while循环的条件下返回,或一段时间后,循环。

现在说我想要一些其他方法,称之为methodB(),在返回之前被激活。我可以这样做:

methodA() { 
    while(some condition) { 
     do computation... 
     if(something 1) { 
      ... 
      if(some condition) { 
       methodB(); 
       return result1; 
      } 
      else if(something 2) { 
       ... 
       if(some condition) { 
        methodB(); 
        return result2; 
       } 
      } 
     } 
    } 
    methodB(); 
    return result3; 
} 

但我觉得它很丑。有没有更好的方式在C#中做这样的事情?

+0

呼叫'的methodB()'之前,你的if语句? – maccettura

+0

请参阅http://stackoverflow.com/questions/36707/should-a-function-have-only-one-return-statement –

+3

听起来像[XY问题](https://meta.stackexchange.com/a/ 66378/246449),你想用这个做什么?也许还有其他方法可以解决你的问题,但是我们不知道这里的实际目标是什么。 –

回答

1

是否methodB取决于任何内部状态methodA?如果没有,那么包裹methodA并调用原methodA(现更名为originalMethodA)后methodB返回:

methodA() { 
    var result = originalMethodA(); 
    methodB(); 
    return result; 
} 

originalMethodA() { 
    // your original methodA goes here, without calls to methodB 
} 
0
methodA() { 
var result = result3; 
while(some condition) { 
    do computation... 
     if(something 1) { 
      ... 
      if(some condition) { 
       result = result1; 
       break; 
      } 
      else if(something 2) { 
       ... 
       if(some condition) { 
        result = result2; 
        break; 
       } 
      } 
     } 
    } 
    methodB(); 
    return result; 
} 
0

这是try-finally一个完美的使用。 finally区块中的代码将在return陈述的全部三个之后执行。

methodA() { 
    try 
    { 
     while(some condition) { 
      do computation... 
      if(something 1) { 
      ... 
       if(some condition) return result1; 
       else if(something 2 && some condition) return result2; 
      } 
     } 
     return result3; 
    }  
    finally { 
     methodB(); 
    } 
} 
0

我认为解决的办法是直线前进,你不应该调用methodB();反正在methodA();它不会产生干净的代码。

对于您的解决方案,如果您没有进行多线程,只需拨打methodB();的电话并在拨打methodA();后立即放置。

var result = methodA(); methodB();

相关问题