扔哪个Null Exception?

Lia*_*ath 5 c# exception

请考虑以下类和方法:

public class MyDto
{
    public MyDtoChild Child {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

public void ProcessDto(MyDto myDto)
{
    if(myDto == null) throw new ArgumentNullException("myDto");
    this.CheckSomething(myDto.Child.ChildProperty);
}
Run Code Online (Sandbox Code Playgroud)

如果使用MyDto带有null的方法调用Child它自己的设备,则会抛出一个NullReferenceException在更复杂的方法中诊断起来非常困难.

通常我ArgumentNullException在方法的开头抛出一个如果myDto为null但是如果为null则抛出适当的异常myDto.Children是什么?一个ArgumentNullException?一个NullReferenceException?自定义异常?

Vin*_*ent 5

如前面的答案所述,它不应​​该是ArgumentNullException因为参数myDTO不是NULL.对我而言抛出一个更有意义,ArgumentException因为传递给方法的参数不符合要求(你希望Children不为null).此外,您的情况符合ArgumentException的描述:

调用方法并且至少有一个传递的参数不符合被调用方法的参数规范时,抛出ArgumentException.