從庫中冒出異常的最佳方式是什麼?當我實現一個接口時,是否有一個好的或不好的做法,讓我的實現細節出現異常,從而給主叫方造成錯誤?我有以下實現,其中每個實現錯誤都遠離主叫方。它把我看作是實現問題分離的最乾淨的方式。但是,我到處讀到,你需要在未觸及的情況下冒出異常。如何在庫實現中冒泡/處理C#異常
public class OneException : Exception
{
public OneException()
{
}
public OneException(string message): base(message)
{
}
public OneException(string message, Exception innerException)
: base(message, innerException)
{
}
}
我的庫實現:
public class MyLib : IMyLib
{
public int Divide(int a, int b)
{
try
{
if (b == 1) throw new OneException();
return a/b;
}
catch (OneException e)
{
throw new ApplicationException("Please do not divide by 1", e);
}
catch (Exception e) // divide by zero and others
{
throw new ApplicationException("Oops", e);
}
}
}
你說「*唯一例外就是一個泛泛的ApplicationException,它不能提供關於原因的線索*」,但客戶端代碼可以將原始異常看作是內部異常......不是? – McGarnagle
@dbaseman是的,但他們必須捕獲非特定的Exception類型並詢問InnerException。最好讓他們抓住他們所困擾的異常類型。 –
@dbaseman:我同意格雷格所說的。另外,如果你只捕捉到非特定的'異常',你可以獲得比你想要的**更多的觀點**,而不僅僅是你**實際可以處理的**。你很可能想要捕獲一個**特定的異常類型,但是想要其他類型的**會進一步冒泡。 –