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 any string in the Throw statement is an exact match for the name of one of the method parameters.

Noncompliant code example

Public Sub DoSomething(param As Integer, secondParam As String)
    If (param < 0)
        Throw New Exception("param") ' Noncompliant
    End If
    If secondParam is Nothing
      Throw New Exception("secondParam should be valid") ' Noncompliant
    End If
End Sub

Compliant solution

Public Sub DoSomething(param As Integer, secondParam As String)
    If (param < 0)
        Throw New Exception(NameOf(param))
    End If
    If secondParam is Nothing
      Throw New Exception($"{NameOf(secondParam)} should be valid")
    End If
End Sub

Exceptions