2017-04-05 70 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();

相關問題