我们的SonarQube通常会在我们的代码上引发以下问题(代码气味):“ ArgumentException中使用的参数名称应与现有参数名称匹配”。 Here是触发此问题的规则。
此问题被触发的示例如下:
private void Validate(SaveCommand command)
{
if(string.IsNullOrEmpty(command.UserCode))
throw new ArgumentNullException(nameof(command.UserCode));
....
}
我的问题是:如何正确重构代码以遵守SonarQube(和MSDN)准则?
或者我应该这样保留它。如果是这样,为什么?
答案 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的异常类型的含义。