繁体   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