2017-02-18 46 views
-1

有沒有什麼辦法可以在函數中操作C#中的程序流?C#將「返回」放入函數中?

我的意思是在C++中,有可能將類似

#define Verify(x) if(x==null) return; 

#define Verify(x) if(x==null) goto _exit; 

成宏觀和地方驗證(x)的任何地方成一個函數。在這個例子中,如果滿足某些條件,宏可以退出函數。 但在C#中,你可以將驗證成一個函數,該函數會被內聯,但你總有在

if (Verify(x)) return; 

形式寫東西。所以問題是,除了異常之外,還有什麼辦法來調用調用函數的控制流作爲被調用的函數嗎?

+5

我嚴重不喜歡在宏中看到控制流程語句或以其他方式隱藏。不要這樣做。例外是要走的路。 –

+0

但是異常有很多開銷。 –

+2

你是什麼意思開銷?異常不用於控制流程,而是指示一個錯誤條件,超出這個條件就無法執行某個功能。你不會拋出異常只是爲了將執行移到其他地方。 –

回答

3

通常的方法來防止無效的條件是在方法體的開頭安裝一個guard子句。你可以找到關於爲什麼我們需要後衛條款和如何實現它們在這篇文章中充分說明:Why do We Need Guard Clauses?

我也防守編碼召開網絡研討會,你可以在這裏找到記錄會話:Advanced Defensive Coding Techniques