在ArgumentException中使用参数的属性

时间:2018-12-10 17:32:24

标签: c# sonarqube

我们的SonarQube通常会在我们的代码上引发以下问题(代码气味):“ ArgumentException中使用的参数名称应与现有参数名称匹配”。 Here是触发此问题的规则。

此问题被触发的示例如下:

private void Validate(SaveCommand command)
{
    if(string.IsNullOrEmpty(command.UserCode))
        throw new ArgumentNullException(nameof(command.UserCode));
    ....
}

我的问题是:如何正确重构代码以遵守SonarQube(和MSDN)准则?

或者我应该这样保留它。如果是这样,为什么?

1 个答案:

答案 0 :(得分:7)

我认为SonarQube就在这里:没有名为UserCode的参数,因此您不应将其指定为ArgumentNullException构造函数的参数。我会避免在这里完全使用ArgumentNullException,因为 argument 不为null-否则它将在NullReferenceException处抛出command.UserCode

相反,只需在描述性消息中使用ArgumentException,例如

throw new ArgumentException(
    $"{nameof(command.UserCode)} property cannot be null or empty",
    nameof(command));

现在,我们可以判断哪个参数不正确(command)以及不正确的方式(其UserCode属性为null或为空)。 SonarQube应该可以满足此要求,并且它更准确地符合IMO的异常类型的含义。