2011-07-17 43 views
0

我有一個代碼片段,檢查網絡是否可用,並且一臺機器在AD域(如果檢查& &配置中有兩個)。硬幣的另一面,我還有每個條件的陳述。在這裏,如果它們不可用,我會拋出相關的異常(我不希望機器不在域等等,這不是例行事件等)。拋出其他和周圍catch塊相同的異常

問題是,競爭條件。我經歷了一些競爭條件,所以他們值得處理。在這種情況下,檢查之後,網絡可能會停止運行,在這種情況下代碼會崩潰,所以我需要catch塊。但是,catch塊將捕獲與else塊中拋出的異常類型相同的異常(與沒有域或網絡相關的異常)。

這是(在else和catch塊中的相同異常類型)代碼味道還是完美的良好編碼?

編輯:我的代碼是這樣的:

if (networkIsAvailable && MachineOnDomain) { } 
else if !(networkIsAvailable) { throw new networknotavailablexception... } 
else if !(machineNotOnDomain // you get the idea 

這是由一個try-catch包圍,捕捉相同的異常類型。

感謝

+0

這些模式是特定於語言的。這是[標籤:C#]? – skaffman

+0

你爲什麼害怕讓你的代碼拋出異常?如果網絡在您需要時無法使用,那麼請不要做任何事 - 讓您的呼叫者決定要做什麼。 –

回答

0

你可以捕捉不同類型的異常:

try{ 
    int x = 1; 
    int y = 0; 
    int z = x /y; 
} 
catch(ArgumentNullException){ 
    //this will never be reached 
} 
catch(DivideByZeroException){ 
    // this code will be reached 
} 

這會幫助你的情況?

+0

嗨,看到評論。 – dotnetdev

+0

如果你對每個失敗條件拋出不同的異常,你發佈的內容似乎對我來說是一個合法的構造......儘管我可能會將它們分開,如果語句,因爲它們彼此之間並沒有很多關係。個人喜好。 –