嵌套成员的 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,因为它是专门为解决null
引用而设计的。
空引用时引发的异常(视觉对象中没有任何内容) Basic) 传递给不接受它作为有效 论点。
相反,你应该使用ArgumentException或你自己的子类。 假设InvalidUserException
或类似的东西。
甚至 msdn 也谈到了。
ArgumentNullException 的行为与 ArgumentException 相同。是的 提供,以便应用程序代码可以区分异常 由 null 参数和由以下参数引起的异常引起 不为空。对于由非 null 参数引起的错误
因此,很明显,如果参数null
请使用ArgumentNullException
,否则ArgumentException
。
也就是说,理想情况下,您甚至不应该允许某人使用无效用户名创建User
实例。我真的会以这样一种方式设计我的User
类,即它永远不会包含Name
作为null
。
如果
参数为空,则应抛出ArgumentException
,ArgumentNullException
只应用于空参数:
if (string.IsNullOrWhiteSpace(user.Name))
throw new ArgumentException("Username is empty", "user");