此問題是從How to indicate that a method was unsuccessful開始的後續操作。 xxx()Tryxxx()模式在許多庫中非常有用。我想知道在不重複我的代碼的情況下提供兩種實現的最佳方式。「TryParse/Parse like」模式:實現它的最佳方式是什麼
什麼是最好的:
public int DoSomething(string a)
{
// might throw an exception
}
public bool TrySomething(string a, out result)
{
try
{
result = DoSomething(a)
return true;
}
catch (Exception)
{
return false;
}
或
public int DoSomething(string a)
{
int result;
if (TrySomething(a, out result))
{
return result;
}
else
{
throw Exception(); // which exception?
}
}
public bool TrySomething(string a, out result)
{
//...
}
我會本能地認爲第一個例子是比較正確的(你確切地知道哪個異常發生),但不能在try/catch太貴了?有沒有辦法在第二個例子中捕獲異常?
只要您的TryX實現不需要捕獲異常(即,您的代碼生成的異常,而不是代碼生成的異常),我會同意您的直覺(如果可能,請避免TryX病例的異常)你打電話)。 – 2008-10-08 12:28:06
此外,我不確定你的意思是「有沒有辦法在第二個例子中捕捉異常?」 - 抓住什麼異常?你想拋出DoSomething(儘管你會拋出一個特定的異常,而不是一般的異常)。 – 2008-10-08 12:28:52
@Jonathan:我的意思是「重新拋出發生在內部處理中的異常,調用者可以知道是什麼導致了錯誤」 – Luk 2008-10-08 12:31:08