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

前端之家收集整理的这篇文章主要介绍了c# – 处理方法参数的null属性的最佳方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
检查方法的参数时,如果它为null,则抛出ArgumentNullException.请参阅以下方法中的第一行.但是参数上的属性应该不为null呢?如果我尝试以相同的方式处理它们,我会收到代码分析错误

CA2208 Instantiate argument exceptions correctly Method
‘PriorityDeratingComponentLogic.CreateItem(IvSimulation)’ passes
‘ivSimulation.SolarPanel’ as the ‘paramName’ argument to a
‘ArgumentNullException’ constructor. Replace this argument with one of
the method’s parameter names. Note that the provided parameter name
should have the exact casing as declared on the method.

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
}

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

解决方法

抛出ArgumentNullException旨在指示参数本身为null.但是,当其中一个参数组件为null,但参数本身不为null时,正确的异常是ArgumentException,参数名称为参数:
if (ivSimulation.GlobalEquipment == null) {
    throw new ArgumentException("GlobalEquipment cannot be null","ivSimulation");
 }

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

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

猜你在找的C#相关文章