.NET Framework 3.5 имеет диапазоны:
Enumerable.Range от MSDN
вы можете использовать его с «Содержит» и оператором IF, так как, как кто-то сказал, оператор SWITCH использует оператор «==».
Вот пример:
int c = 2;
if(Enumerable.Range(0,10).Contains(c))
DoThing();
else if(Enumerable.Range(11,20).Contains(c))
DoAnotherThing();
Но я думаю, что мы можем повеселиться: поскольку вам не понадобятся возвращаемые значения, а это действие не принимает параметров, вы можете легко использовать действия!
public static void MySwitchWithEnumerable(int switchcase, int startNumber, int endNumber, Action action)
{
if(Enumerable.Range(startNumber, endNumber).Contains(switchcase))
action();
}
Старый пример с этим новым методом:
MySwitchWithEnumerable(c, 0, 10, DoThing);
MySwitchWithEnumerable(c, 10, 20, DoAnotherThing);
Поскольку вы передаете действия, а не значения, вы должны опустить скобки, это очень важно. Если вам нужна функция с аргументами, просто измените тип Action
на Action<ParameterType>
. Если вам нужны возвращаемые значения, используйте Func<ParameterType, ReturnType>
.
В C # 3.0 нет простого Частичного приложения для инкапсуляции того факта, что параметр case такой же, но вы создаете небольшой вспомогательный метод (немного многословный, хотя).
public static void MySwitchWithEnumerable(int startNumber, int endNumber, Action action){
MySwitchWithEnumerable(3, startNumber, endNumber, action);
}
Вот пример того, как новые функциональные импортированные операторы ИМХО более мощные и элегантные, чем старые императивные.