public void setYear(String year) { if (Integer.parseInt(year) >= 0) { //Do stuff here } }
Используйте Integer.parseInt (String s) , чтобы проверить, можно ли преобразовать год строки в целое число, большее или равное нулю (логически, год не может быть отрицательным). Если вход не может быть преобразован в целое число, он выдаст исключение NumberFormatException .
Нет никакого синтаксиса в C++, ни C# для второго метода, который Вы упомянули.
нет ничего неправильно с Вашим первым методом. Если однако у Вас есть очень большие диапазоны, просто используйте серию если операторы.
Один менее известный фасет переключатель в C# - то, что это полагается оператор = и так как это может быть переопределено, у Вас могло быть что-то вроде этого:
string s = foo();
switch (s) {
case "abc": /*...*/ break;
case "def": /*...*/ break;
}
gcc реализует расширение языка C для поддержки последовательных диапазонов:
switch (value)
{
case 1...3:
//Do Something
break;
case 4...6:
//Do Something
break;
default:
//Do the Default
break;
}
Редактирование : Просто замеченный C# наклеивают вопрос, поэтому по-видимому, ответ gcc не помогает.
Другая опция состояла бы в том, чтобы использовать стандартную программу. Если случаи 1-3 все выполняются, та же логика тогда обертывают ту логику в стандартную программу и называют его для каждого случая. Я знаю, что это на самом деле не избавляется от операторов выбора, но это действительно реализует хороший стиль и сводит обслуживание к минимуму.....
[Редактирование] Добавленная альтернативная реализация для соответствия исходному вопросу... [/Редактирование]
switch (x)
{
case 1:
DoSomething();
break;
case 2:
DoSomething();
break;
case 3:
DoSomething();
break;
...
}
private void DoSomething()
{
...
}
Высокий звук
switch (x)
{
case 1:
case 2:
case 3:
DoSomething();
break;
...
}
private void DoSomething()
{
...
}
. СЕТЕВАЯ Платформа 3.5 имеет диапазоны:
, с которым можно использовать его, "содержит" и оператор IF, так как как кто-то сказал, что Оператор переключения использует "==" оператор.
Здесь пример:
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 нет никакого легкого Частичное Приложение для инкапсуляции факта, параметр случая является тем же, но Вы создаете немного вспомогательного метода (немного подробный, tho).
public static void MySwitchWithEnumerable(int startNumber, int endNumber, Action action){
MySwitchWithEnumerable(3, startNumber, endNumber, action);
}
Здесь пример того, как новый функциональный импортированный оператор, по моему скромному мнению, более мощен и изящен, чем старый обязательный.
int start
и int count
. Ваша привычка в качестве примера работает правильно способ, которым они были записаны. Вы пишете его, как будто второй аргумент int end
. Например - Enumerable.Range(11,20)
привел бы к 20 числам, запускающимся с 11, и не числам от 11 до 20.
– Gabriel McAdams
03.08.2012, 12:46
Этот синтаксис от Выбора Visual Basic ... Оператор выбора :
Dim number As Integer = 8
Select Case number
Case 1 To 5
Debug.WriteLine("Between 1 and 5, inclusive")
' The following is the only Case clause that evaluates to True.
Case 6, 7, 8
Debug.WriteLine("Between 6 and 8, inclusive")
Case Is < 1
Debug.WriteLine("Equal to 9 or 10")
Case Else
Debug.WriteLine("Not between 1 and 10, inclusive")
End Select
Вы не можете использовать этот синтаксис в C#. Вместо этого необходимо использовать синтаксис от первого примера.
Можно не учесть новую строку, которая дает Вам:
case 1: case 2: case 3:
break;
, но я рассматриваю тот плохой стиль.