检查方法的参数时,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错误是我应该抑制的,还是有一种普遍接受的方式来更好地处理这个问题?也许问题是上游问题,我们甚至不应该检查这些属性是否为空?
投掷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将是一个非常有效的选择.
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |