验证构造函数参数的正确方法是什么

Eri*_*tas 5 c# validation constructor

所以我的构造函数中有一个带有单个字符串参数的类:

public MyClass(string name)
{
    this.Name = name;
}
Run Code Online (Sandbox Code Playgroud)

但我永远不想担心有人初始化一个名为NULL或零长度字符串的MyClass实例.什么是最好的验证参数?使用属性或方法,如果提供了无效参数,您可以随时执行任何操作,返回null或不设置任何内容.但是一旦调用了构造函数,就会创建该对象的实例,无论它是否传递了有效的参数.

如下所示抛出异常最好的方法?或者是否有其他更优选的方法?

public MyClass(string name)
{
    if (name == null | name == "") throw new ArgumentException("Name can not be null or blank", "name");

    this.Name = name;
}
Run Code Online (Sandbox Code Playgroud)

当然,如果参数无效,我总是可以将名称设置为某些默认名称,如"Unnamed MyClass",但在这种情况下,我宁愿只是阻止一个无效的名称,然后尝试假设一些替代行为.

Sam*_*ell 7

  1. 扔一个 ArgumentNullException
  2. ArgumentNullException如果名字是ctor投掷的文件null
  3. 如果您使用的是代码约定,请在参数验证后添加Contract.EndContractBlock()行.

编辑:而不是这个:

if (name == null || name == "")
Run Code Online (Sandbox Code Playgroud)

用这个:

if (string.IsNullOrEmpty(name))
Run Code Online (Sandbox Code Playgroud)

  • 除非参数实际上为空,否则任何方法都不应抛出“ArgumentNullException”。因此 `name == null` 可能会抛出 1,但 `name.Length == 0` 应该抛出一个 `ArgumentException`。 (2认同)