处理方法参数的null属性的最佳方法

Bob*_*orn 6 c#

检查方法的参数时,ArgumentNullException如果它为null ,则抛出一个 .请参阅以下方法中的第一行.但是参数上的属性应该不为null呢?如果我尝试以相同的方式处理它们,我会收到代码分析错误:

CA2208正确实例化参数异常方法'PriorityDeratingComponentLogic.CreateItem(IvSimulation)'将'ivSimulation.SolarPanel'作为'paramName'参数传递给'ArgumentNullException'构造函数.将此参数替换为方法的参数名称之一.请注意,提供的参数名称应具有方法上声明的确切大小.

public DeratingComponentBase CreateItem(IvSimulation ivSimulation)
{
    if (ivSimulation == null) { throw new ArgumentNullException("ivSimulation"); }
    if (ivSimulation.SolarPanel == null) { throw new ArgumentNullException("ivSimulation.SolarPanel"); }
    if (ivSimulation.GlobalEquipment == null) { throw new ArgumentNullException("ivSimulation.GlobalEquipment"); }

    // ... method body here
}
Run Code Online (Sandbox Code Playgroud)

CA错误是我应该抑制的,还是有一种普遍接受的方式来更好地处理这个问题?也许问题是上游问题,我们甚至不应该检查这些属性是否为空?

das*_*ght 5

投掷ArgumentNullException是为了表明论证本身就是null.但是,当其中一个参数组件是null,但参数本身不是时,正确的异常是ArgumentException将参数的名称作为参数:

if (ivSimulation.GlobalEquipment == null) {
    throw new ArgumentException("GlobalEquipment cannot be null", "ivSimulation");
 }
Run Code Online (Sandbox Code Playgroud)

这提供了有关消息中的错误的信息,同时指定ivSimulation为参数名称.

注意:我假设您无法GlobalEquipment在构造函数中进行验证IvSimulation,因为在该构造函数中抛出ArgumentNullException将是一个非常有效的选择.