我知道两种方法来检查方法的参数并在需要时抛出异常。
1)对每个参数进行检查,错误时抛出异常:
public void Method(object parameter1, object parameter2)
{
if (parameter1 == null)
{
throw new ArgumentNullException("parameter1");
}
if (parameter2 == null)
{
throw new ArgumentNullException("parameter2");
}
...
}
2) 立即检查所有参数并为所有参数抛出相同的异常:
public void Method(object parameter1, object parameter2)
{
if (parameter1 == null || parameter2 == null)
{
throw new ArgumentNullException();
}
...
}
在我看来,第一种方法更好、更干净,但也涵盖了很多线条。例如,一个方法实际上执行了 2 行代码 - 这样,每个参数的代码将增加 4 行(包括空行)。
我感兴趣的是经验丰富的程序员使用的方法。还有比这两种更好的方法吗?
2020 年 7 月更新
查看这篇博客文章,了解如何实现类似的代码契约方法。
https://enterprisecraftsmanship.com/posts/code-contracts-vs-input-validation/ https://enterprisecraftsmanship.com/posts/code-contracts-vs-input-validation/
原始答案如下
—-
如果您使用 .NET Framework 4,请查看代码合约 http://msdn.microsoft.com/en-us/devlabs/dd491992,将其简化为一行代码
public string Reverse(string text)
{
Contract.Requires<ArgumentNullException>(text!=null, "ParAmeter cannot be null.");
.....
}
您使用它的原因是因为您现在可以获得自动化工具,例如Pex http://research.microsoft.com/en-us/projects/pex/告诉您对此方法应用哪些单元测试。如果此方法根据您的调用方式抛出异常,它还会在编译时向您提供反馈。喜欢
String text = null;
String reversedString = Reverse(text);
编译器会警告您这将引发异常。
注意代码合同需要安装插件,但它是免费的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)