我们说我有一个方法:
public void SayHello(User user)
{
if (user == null)
throw new ArgumentNullException("user");
Console.Write(string.Format("Hello from {0}", user.Name));
}
很明显我应该使用如上所示的ArgumentNullException来验证用户不是null。现在我如何验证user.Name不为空?这样做是不错的做法:
if (string.IsNullOrWhiteSpace(user.Name))
throw new ArgumentNullException("user", "Username is empty");
答案 0 :(得分:8)
不,您不应该为此目的而抛出ArgumentNullException,因为它专门用于解决null
引用问题。
null 引用时抛出的异常(Visual中没有任何内容) Basic)被传递给一个不接受它作为有效的方法 参数。
相反,您应该使用ArgumentException或您自己的子类。让我们说InvalidUserException
或类似的东西。
ArgumentNullException的行为与ArgumentException相同。它是 提供以便应用程序代码可以区分异常 由参数引起的空参数和异常引起的 不是空的。对于由非空的参数引起的错误
很明显,如果参数为null
,则使用ArgumentNullException
和ArgumentException
。
那就是说,理想情况下,您甚至不应该允许某人使用无效的用户名创建User
的实例。我确实设计了我的User
课程,使其永远不会包含Name
null
。
答案 1 :(得分:3)
如果参数为空,则应抛出ArgumentException
,ArgumentNullException
仅应用于空参数:
if (string.IsNullOrWhiteSpace(user.Name))
throw new ArgumentException("Username is empty", "user");