## Why is this an issue?

Because parameter names could be changed during refactoring, they should not be spelled out literally in strings. Instead, use `nameof()`, and the string that’s output will always be correct.

This rule raises an issue when a string in the `throw` statement contains the name of one of the method parameters.

### Noncompliant code example

    void DoSomething(int someParameter, string anotherParam)
    {
        if (someParameter < 0)
        {
            throw new ArgumentException("Bad argument", "someParameter");  // Noncompliant
        }
        if (anotherParam == null)
        {
            throw new Exception("anotherParam should not be null"); // Noncompliant
        }
    }

### Compliant solution

    void DoSomething(int someParameter)
    {
        if (someParameter < 0)
        {
            throw new ArgumentException("Bad argument", nameof(someParameter));
        }
        if (anotherParam == null)
        {
            throw new Exception($"{nameof(anotherParam)} should not be null");
        }
    }

### Exceptions

- The rule doesn’t raise any issue when using C# < 6.0.
- When the parameter name is contained in a sentence inside the `throw` statement string, the rule will raise an issue only if the parameter name is at least 5 characters long. This is to avoid false positives.