До C # 6 инструкция переключения была зарезервирована для примитивных типов.Теперь вы можете переключаться на шаблоны.
Сопоставление шаблонов
И так вы можете делать такие вещи:
class Program
{
static void Main(string[] args)
{
Print("+", 2, 2);
Print("-", 2, 2);
Print("/", 2, 2);
Print("*", 2, 2);
Print("^", 2, 2);
Print("%", 2, 2);
Print(" ", 2, 2);
Print("", 2, 2);
Console.Read();
}
static void Print(string op, int nmb1, int nmb2)
{
var res = Compute(op, nmb1, nmb2);
Console.WriteLine(res != null ?
$"{nmb1} {op} {nmb2} = {res}" :
$"invalid {op?.Trim()} operator description");
}
static int? Compute(string op,int nmb1,int nmb2)
{
switch (op)
{
case "+":
return nmb1 + nmb2;
case "-":
return nmb1 - nmb2;
case "*":
return nmb1 * nmb2;
case "/":
return nmb1 / nmb2;
case "%":
return nmb1 % nmb2;
case "^":
return nmb1 ^ nmb2;
case var o when (o?.Trim().Length ?? 0) == 0:
// white space
return null;
default:
return null;
}
}
}
консольный вывод:
2 + 2 = 4
2 - 2 = 0
2 / 2 = 1
2 * 2 = 4
2 ^ 2 = 0
2 % 2 = 0
invalid operator
invalid operator