When Select Case statements have large sets of case clauses, it is usually an attempt to map two sets of data. A Dictionary should be used instead to make the code more readable and maintainable.
This rule ignores Select Case statements over Enum arguments and empty, fall-through cases.
Store all the cases apart from the Case Else one in a dictionary and try to get the matching value by calling the TryGetValue method.
Public Class TooManyCase
Public Function MapValues(Ch As Char) As Integer
Select Case Ch ' Noncompliant: 5 cases, "Case Else" excluded, more than maximum = 4
Case "a"c
Return 1
Case "b"c, "c"c
Return 2
Case "d"c
Return 3
Case "e"c
Return 4
Case "f"c, "g"c, "h"c
Return 5
Case Else
Return 6
End Select
End Function
End Class
Public Class TooManyCase
Private fMatching As New Dictionary(Of Char, Integer) From {
{ "a"c, 1 },
{ "b"c, 2 },
{ "c"c, 2 },
{ "d"c, 3 },
{ "e"c, 4 },
{ "f"c, 5 },
{ "g"c, 5 },
{ "h"c, 5 },
}
Public Function MapValues(Ch As Char) As Integer
Dim Value As Integer
If fMatching.TryGetValue(Ch, Value) Then
Return Value
Else
Return 6
End If
End Function
End Class