== Why is this an issue? When https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement[Select Case] statements have large sets of case clauses, it is usually an attempt to map two sets of data. A https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2[Dictionary] should be used instead to make the code more readable and maintainable. === Exceptions This rule ignores `Select Case` statements over `Enum` arguments and empty, fall-through cases. == How to fix it Store all the cases apart from the `Case Else` one in a dictionary and try to get the matching value by calling the https://learn.microsoft.com/en-us/dotnet/api/system.collections.generic.dictionary-2.trygetvalue[TryGetValue] method. === Code examples ==== Noncompliant code example [source,vbnet,diff-id=1,diff-type=noncompliant] ---- 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 ---- ==== Compliant solution [source,vbnet,diff-id=1,diff-type=compliant] ---- 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 ---- include::../resources-dotnet.adoc[] * https://learn.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/select-case-statement[Select...Case Statement] include::../rspecator-dotnet.adoc[]