When switch 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 switch statements over Enum arguments and empty, fall-through cases.
Store all the cases apart from the default one in a dictionary and try to get the matching value by calling the TryGetValue method.
The example below are using the "Maximum number of case" property set to 4.
public class TooManyCase
{
public int mapValues(char ch)
{
switch(ch) { // Noncompliant: 5 cases, "default" excluded, more than maximum = 4
case 'a':
return 1;
case 'b':
case 'c':
return 2;
case 'd':
return 3;
case 'e':
return 4;
case 'f':
case 'g':
case 'h':
return 5;
default:
return 6;
}
}
}
using System.Collections.Generic;
public class TooManyCase
{
Dictionary<char, int> matching = new Dictionary<char, int>()
{
{ 'a', 1 },
{ 'b', 2 },
{ 'c', 2 },
{ 'd', 3 },
{ 'e', 4 },
{ 'f', 5 },
{ 'g', 5 },
{ 'h', 5 }
};
public int mapValues(char ch)
{
int value;
if (this.matching.TryGetValue(ch, out value)) {
return value;
} else {
return 6;
}
}
}