检查方法参数的最佳方法是什么?

mve*_*ith 9 c# validation parameters

我知道有两种方法可以检查方法的参数,并在需要时抛出异常.

1)检查每个参数并在错误时抛出异常:

public void Method(object parameter1, object parameter2)
{
    if (parameter1 == null)
    {
        throw new ArgumentNullException("parameter1");
    }

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

    ...
}
Run Code Online (Sandbox Code Playgroud)

2)立即检查所有参数并为所有参数抛出相同的异常:

public void Method(object parameter1, object parameter2)
{
    if (parameter1 == null || parameter2 == null)
    {
        throw new ArgumentNullException();
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

在我看来,第一种方法更好,更清洁,但也涵盖了很多方面.例如,实际执行2行代码的方法 - 以这种方式代码将为每个参数增加4行(包括空行).

我感兴趣的是有经验的程序员使用的方法.有没有比这两个更好的方法?

Dom*_*icz 22

如果您使用的是.NET Framework 4,请查看代码合同,将其简化为单行代码

public string Reverse(string text)
{
   Contract.Requires<ArgumentNullException>(text!=null, "ParAmeter cannot be null.");

   .....
}
Run Code Online (Sandbox Code Playgroud)

您之所以会这样做是因为您现在可以使用像Pex这样的自动化工具来告诉您应用于此方法的单元测试.如果此方法根据您的调用方式抛出异常,它还会在编译时为您提供反馈.喜欢

String text = null;
String reversedString = Reverse(text);
Run Code Online (Sandbox Code Playgroud)

编译器会警告您这将引发异常.

注意Code Contracts需要安装加载项,但它是免费的.


pyl*_*ver 5

使用method属性可以干净地检查参数.我在python中编写了一个参数验证框架.c#最佳实践在这里

  • 感谢有趣的链接!但我认为使用代码约定是.NET框架4中更好的解决方案. (2认同)