Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using a parameter's property in an ArgumentException

Tags:

c#

sonarqube

Our SonarQube often raises the following issue (Code Smell) on our code: "Parameter names used into ArgumentException should match an existing one". Here is the rule that triggers this issue.

An example of this issue being triggered can be the following:

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

My question is: How do i properly refactor the code to abide by SonarQube (and MSDN) guidelines?

Or should i just keep it like this. If so, why?

like image 311
Wampie Driessen Avatar asked Dec 06 '22 10:12

Wampie Driessen


1 Answers

I think SonarQube is spot on here: there's no parameter named UserCode, so you shouldn't be specifying it as an argument to the ArgumentNullException constructor. I would avoid using ArgumentNullException at all here, as the argument isn't null - otherwise it would be throwing a NullReferenceException at command.UserCode.

Instead, just use ArgumentException with a descriptive message, e.g.

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

Now we can tell which parameter is incorrect (command) and how (its UserCode proeprty is null or empty). SonarQube should be fine with this, and it meets the meaning of the exception type more accurately IMO.

like image 151
Jon Skeet Avatar answered Jan 31 '23 15:01

Jon Skeet