嵌套成员的 ArgumentNullException

本文关键字:ArgumentNullException 成员 嵌套 | 更新日期: 2023-09-27 18:35:43

假设我有一个方法:

public void SayHello(User user)
{
    if (user == null)
        throw new ArgumentNullException(nameof(user));
    Console.Write(string.Format("Hello from {0}", user.Name));
}

很明显,我应该使用如上所示的 ArgumentNullException 来验证用户是否为空。现在如何验证该用户。名称不为空?这样做会是一种好的做法吗:

if (string.IsNullOrWhiteSpace(user.Name))
    throw new ArgumentNullException("user", "Username is empty");

嵌套成员的 ArgumentNullException

不,你不应该为此目的抛出 ArgumentNullException,因为它是专门为解决null引用而设计的。

空引用时引发的异常(视觉对象中没有任何内容) Basic) 传递给不接受它作为有效 论点。

相反,你应该使用ArgumentException或你自己的子类。 假设InvalidUserException或类似的东西。

甚至 msdn 也谈到了。

ArgumentNullException 的行为与 ArgumentException 相同。是的 提供,以便应用程序代码可以区分异常 由 null 参数和由以下参数引起的异常引起 不为空。对于由非 null 参数引起的错误

因此,很明显,如果参数null请使用ArgumentNullException,否则ArgumentException

也就是说,理想情况下,您甚至不应该允许某人使用无效用户名创建User实例。我真的会以这样一种方式设计我的User类,即它永远不会包含Name作为null

如果

参数为空,则应抛出ArgumentExceptionArgumentNullException只应用于空参数:

if (string.IsNullOrWhiteSpace(user.Name))
    throw new ArgumentException("Username is empty", "user");
相关文章:
  • 没有找到相关文章