簡體   English   中英

集中Debug.Assert並在c#中拋出異常的更好方法?

[英]Better way to centralize Debug.Assert and throw exception in c#?

我的大多數方法都檢查函數中的null參數,所以我想而不是寫

Debug.Assert(x != null, "x should not be null");

if (x == null)
{
    throw new ArgumentNullException("x");
}

在任何地方,我只是用靜態方法創建一個靜態類來集中它。

然而,它有自己的問題,如果Debug.Assert被觸發,那么VS將在靜態方法中彈出,而不是調用方法將在哪里,這就是它所喜歡的位置。

只是好奇是否有人有更好的方法來處理這種情況或只是一般如何處理這種重復的工作?

謝謝!

另一種方法是Microsoft Research的DataContracts

如果您要顯式拋出異常,那么斷言x!= null是非常重要的。 您將在調試中看到異常,除非您有一些全局異常處理 - 即使這樣,您也可以打破所有異常,而不僅僅是未捕獲。

使用assert的時間是,如果您確定最安全的發布模式代碼路徑是執行除拋出異常之外的其他操作,例如從函數中提前返回,將變量初始化為默認值等。

不要忽略其他答案中提到的實用程序,但是您可能希望在給定的情況下仔細考慮是否適當拋出異常或斷言(這不僅適用於參數驗證)。

一種方法將所有內容放在除變量名稱之外的代碼中,以最小化源中的文字內容量:

Guard.Check(EGuards.NotNull, "x");

另一種方法,如果你進入流暢的擴展(我喜歡翻轉這個)。

x.MustNotBeNull();

Sharp-architecture為例,查看Design By Contract

您可能還想查看此處描述的Enterprise Library Exception Hadling Block。 其中一個功能是集中式異常處理。 如果沒有別的開源,那么你可以將它用作你自己實現的模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM