여러 경우가 switch 문

떨어질 수 있는 방법이 여러 사건을 통해 밝히지 않은 채 '케이스' 제표를 값: 반복적으로?

그러니까말이야 가능합니다.

switch (value)
{
   case 1:
   case 2:
   case 3:
      //do some stuff
      break;
   case 4:
   case 5:
   case 6:
      //do some different stuff
      break;
   default:
       //default stuff
      break;
}

하지만 이 같은 일이 I& # 39; d like to do.

switch (value)
{
   case 1,2,3:
      //Do Something
      break;
   case 4,5,6:
      //Do Something
      break;
   default:
      //Do the Default
      break;
}

39 에서 m thinking of I& 로만스였나 구문, 다른 언어, 아니면 내가 무언가 빠진?

질문에 대한 의견 (7)

내 생각엔 이 이미 답변됨. 그러나 여전히 두 가지 옵션을 사용할 수 있는 더 나은 방법이 수행여 구조상 있는 것 같아요.

switch (value)
{
case 1: case 2: case 3:          
    // Do Something
    break;
case 4: case 5: case 6: 
    // Do Something
    break;
default:
    // Do Something
    break;
}
해설 (12)
해결책

두 번째 방법은 없는 C # 의 구문이 아니하고또 c++컴파일러는 언급되지 않았다.

39 의 there& 아무런 문제가 처음 메서드입니다. 그러나 당신은 매우 큰 범위를 사용할 경우, 그냥 일련의 명령문입니다.

해설 (4)

이 구문은 Visual Basic 에서 [셀레스트케이스 기술서임을] (https://msdn.microsoft.com/en-us/library/cy37t14y.aspx? f = 255&amp, 마스페로르 = - 2147217396 # Anchor_3):

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 # 에서 사용할 수 없습니다. 대신, 첫 번째 사례 중에서 구문을 사용해야 합니다.

해설 (3)

하지만, 조금 늦게 I& 원래 질문은 # 39 m 이 질문에 대한 포스팅 기대 속에 사용하여 그 누군가를 새로운 버전 ( C # 7 - 기본으로 제공되는 비주얼 스튜디오에서 2017/.NET 레임워크 4.6.2), it 발견하리니 도움이 된다.

이제 7, C # 의 범위 기반 스위칭이란 작성할 수 있는 [스위치 기술서임을] [1] 와 함께 보호하리요 OP& # 39 의 문제.

  • Example:*

int i = 5;

switch (i)
{
    case int n when (n >= 7):
        Console.WriteLine($"I am 7 or above: {n}");
        break;

    case int n when (n >= 4 && n 
해설 (2)

줄 바꿈 아웃해야 확보할 수 있으므로 둘 수 있습니다.

case 1: case 2: case 3:
   break;

하지만 난 그렇게 고려해보십시오 스타일.

해설 (0)

.NET Framework 3.5 는 attaboy 범위:

너메라블레그레인지 MSDN 에서

&quot contains&quot, 함께 사용할 수 있습니다. 와 같은 경우, 이후 SWITCH 문은 soundmixer. " = &quot 기술서임을 누군가 말했다. 작동자.

여기서 한 가지 예입니다.

int c = 2;
if(Enumerable.Range(0,10).Contains(c))
    DoThing();
else if(Enumerable.Range(11,20).Contains(c))
    DoAnotherThing();

하지만 난 더 재미있게 가능하다고 생각합니다. # 39 이 작업은 이후 너회가 won& 반환 값 # 39, t, t need doesn& 시행하십시오 매개변수입니다 작업을 편리하게 사용할 수 있습니다!

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);

작업 이후 틀렸다니까 반군지역 값뿐만 it& # 39 에 괄호를 생략하십시오 합니다 아니라, 매우 중요하다. 그냥 '작업' 을 하는 경우, 함수, ParameterType&gt Action&lt 유형을 변경하십시오 인수와 함께 ','. 반환 값 하는 경우, ',' Func&lt 파라메트리프, ReturnType&gt 사용합니다.

C # 3.0 손쉰운 없다 부분 응용 프로그램 에 캡슐화합니다 파라메트가 같지만 그렇지 사건을 만든 작은 도우미가 방법 (조금 자세히, 수천).

public static void MySwitchWithEnumerable(int startNumber, int endNumber, Action action){ 
    MySwitchWithEnumerable(3, startNumber, endNumber, action); 
}

이 보다 더 강력하고 새로운 기능을 갖춘 사례를 임포트된 기술서임을 우아한 옛 불신하니 이럴 필요가 있다.

해설 (4)

다음은 C # 완료하십시오 7 솔루션입니다.

switch (value)
{
   case var s when new[] { 1,2,3 }.Contains(s):
      //Do Something
      break;
   case var s when new[] { 4,5,6 }.Contains(s):
      //Do Something
      break;
   default:
      //Do the Default
      break;
}

너무 수행됨 문장열.

switch (mystring)
{
   case var s when new[] { "Alpha","Beta","Gamma" }.Contains(s):
      //Do Something
      break;
...
}
해설 (0)

@ 제니퍼 오웬스냐: 아래 코드는 정말이야 won& # 39, 빗나갔다.

case 1 | 3 | 5:
//not working do something

이렇게 할 수 있는 유일한 방법인 것입니다.

case 1: case 2: case 3:
// do something
break;

비주얼 베이직 코드를 넣을 수도 쉽게 검색할 수 있는 작업 중인 설명했습니다. # 39 의 경우, d 블록, 어느 누구도 다른 옵션을 스위치이거나 I& 매우 편리한 제안할 수 있는 점, 비주얼 베이직 및 가져오기할 http://www. 익스프림 .dll 뒤로를 데이터베이스에구성원을 c # 프로젝트.

참고: visual basic 은 avamer 스위치에서도 의 경우 선택합니다.

해설 (0)

또 다른 옵션은 약간만이라도 사용할 수 있는 프로그램이다. 모든 건 똑같은 논리를 실행하십시오 경우 그 다음 정기 및 호출하십시오 논리는 1-3 랩 (wrap it 각 케이스. # 39, 실제로 이 doesn& 그러니까말이야 폐기할 경우 t 명령문입니다 않지만 좋은 스타일 및 유지 관리 구현하십시오 렉시한테서 최소.

[편집] [/ 편집] 뷰대체 구축현 추가되든지 일치시키려면 원래 질문.

switch (x)
{
   case 1:
      DoSomething();
      break;
   case 2:
      DoSomething();
      break;
   case 3:
      DoSomething();
      break;
   ...
}

private void DoSomething()
{
   ...
}
  • Alt *
switch (x)
{
   case 1:
   case 2:
   case 3:
      DoSomething();
      break;
   ...
}

private void DoSomething()
{
   ...
}
해설 (0)

C # 의 한 것이 상대적으로 덜 알려진 면처리 스위치 및 수 있기 때문에 오브리든 외상때문에 에서는 작동자 = 이 같은 일이.

&lt pre&gt &lt code>;;; 문자열 s = 푸 ();

스위치 (s) { 케이스 abc&quot ";: /./ 분할합니다. 케이스 def&quot ";: /./ 분할합니다. } &lt /code&gt &lt /pre>;;;

해설 (1)

gcc 는 C 언어 순차인지 확장명으로 지원할 수 있는 범위:

switch (value)
{
   case 1...3:
      //Do Something
      break;
   case 4...6:
      //Do Something
      break;
   default:
      //Do the Default
      break;
}

&lt B&gt Edit&lt /B>:;;; 그냥 태그 변호사인가 도왔으매 추정되는 것을 C #, # 39 는 doesn& mgcc 오토메이티드 t help.

해설 (0)

39, GOTO 명령을 don& 진짜 너무 마음에 it& # 39 의 공식 밀리초입니다 자료, 다음은 있지만, 모든 허용된 구문을.

만약 끝점까지의 사람들에게 목록니다 섹선에서 컴파일 타임 스위치에 연결되어, 오류가 발생합니다. 이 가을 through&quot &quot 셨노라 어떠한 널리 알려져 있다. 규칙이에요 예를 들면

switch (i) {
case 0:
   CaseZero();
   break;
case 1:
   CaseOne();
   break;
default:
   CaseOthers();
   break;
}

사용할 수 없기 때문에 스위치였습니다 섹선에서 끝점까지의 접속할 수 있다. C 와 c++에서 실행할 수 없는, 스위치 섹선에서 달리, 가을 &quot through&quot. 다음 예는 스위치였습니다 섹션 및

switch (i) {
case 0:
   CaseZero();
case 1:
   CaseZeroOrOne();
default:
   CaseAny();
}

컴파일 타임 오류가 발생합니다. 그 뒤에 다른 스위치 (switch) 섹션은 실행할 때 실행 할 수 있는 경우 또는 이동, 고토 명시성 섹선에서 기본 기술서임을 사용해야 합니다.

switch (i) {
case 0:
   CaseZero();
   goto case 1;
case 1:
   CaseZeroOrOne();
   goto default;
default:
   CaseAny();
   break;
}

여러 레이블을 스위치 섹선에서 에서 사용할 수 있습니다. 예를 들면

switch (i) {
case 0:
   CaseZero();
   break;
case 1:
   CaseOne();
   break;
case 2:
default:
   CaseTwo();
   break;
}

I believe 이번 예에서는 이동 it& # 39 의 유일한 방법은 사용할 수 있으며, 실제로 폴스러.

출처: 71%29.aspx http://msdn.microsoft.com/en-us/library/aa664749%28v = vs.

해설 (1)

넣을 수 있는 방안을 찾기 위해 그동안 많은 작동합니까 가혹한 것 중 하나가 더 이상 또는 C # 구문을 사용하여 어떻게든 여바바 작업이 보다. Switch 문 다운로드합니까 규모의 직접 사용하는 경우는 거의 없습니다. 나라면 어떤 데이터를 분석한 결과 강하게 제안하세요 틀렸다니까 테스트 및 및끝 틀렸다니까 하늘과 땅 차이다.

예를 들어 있는 값을 알려 말하도다 테스트 할 경우 홀수들의 maxvalorarray 빠르게 볼 수 있다. 피하고 싶은 코드에 계산이므로 할 필요 없이 낭비 및 온라인 운영까지도 범위 내의 작은 소수의 목록을 찾을 수 있습니다. 각 값을 통해 알려진 홀수들의 비교하십시오 벽돌이날아와 스위치에서도 사용할 수 있습니다.

그냥 지도를 만들 수 있으며, 작은 소수의 즉각적인 결과를 어레이에서는 수도 있습니다.

    bool[] Primes = new bool[] {
        false, false, true, true, false, true, false,    
        true, false, false, false, true, false, true,
        false,false,false,true,false,true,false};
    private void button1_Click(object sender, EventArgs e) {
        int Value = Convert.ToInt32(textBox1.Text);
        if ((Value >= 0) && (Value < Primes.Length)) {
            bool IsPrime = Primes[Value];
            textBox2.Text = IsPrime.ToString();
        }
    }

아마 보고 싶은 문자열은 문자의 경우 진수. 한 대형 스위치 기술서임을 웅리 및 어느 정도 사용할 수 있습니다.

정규 표현식 기능을 사용할 수도 있습니다 챨 테스트하려면 사용하거나 IndexOf http://upload. 진수 문자를 문자열의 챨 검색합니다.

        private void textBox2_TextChanged(object sender, EventArgs e) {
        try {
            textBox1.Text = ("0123456789ABCDEFGabcdefg".IndexOf(textBox2.Text[0]) >= 0).ToString();
        } catch {
        }
    }

Say you want to do 값을 알려 3 따라 다른 조치를 한 것으로 maxvalorarray 1 24. 꼭 이래야겠어요 제안하세요 집합을 사용하는 경우 명령문입니다. 그리고 만약 그 comp. 너무 복잡해서 (또는 숫자임 pokemonsilver. 큰 등 5 가지 동작 범위의 값을 따라 1 부터 90) 을 사용할 이넘 정의하십시오 작업 및 생성하시겠습니까 어레이입니다 map of the 이넘. 그런 다음 가치를 위해 사용될 수 있으며, 작업의 꽂으십시오 인덱스화할 매핑해야 어레이입니다 이넘 운영까지도. 다음 중 하나를 사용할 수 있는 매우 간단한 스위치 기술서임을 처리할 수 있는 작은 세트의 경우 명령문입니다 또는 enum 값이 됩니다.

또한, 니스 (nice) 에 대해서 일정한 범위의 값을 매핑해야 어레이에서는 변환하는 작업을 쉽게 변경할 수 있다는 것이 코드를 통해. # 39 로 쉽게 변경할 수 있다 단, t 너회가 can& 하드와이어드 코드 실행 시 매핑해야 어레이에서는 쉽다.

해설 (2)

정말 큰 양의 문자열이어야 경우 (또는 다른 유형용) 하는 것, 내가 사용하는 경우 모든 레코먼드 같은 문자열 목록을 결합하여 구체화하십시오. Map_layer 재산이잖아

그래서 같은 빅 스위치 경우 기술서임을 있습니다.

switch (stringValue)
{
    case "cat":
    case "dog":
    case "string3":
    ...
    case "+1000 more string": //Too many string to write a case for all!
        //Do something;
    case "a lonely case"
        //Do something else;
    .
    .
    .
}

이런 경우 기술서임을 있는 바꾸시겠습니까 할 수 있습니다.

//Define all the similar "case" string in a List
List listString = new List(){ "cat", "dog", "string3", "+1000 more string"};
//Use string.Contains to find what you are looking for
if (listString.Contains(stringValue))
{
    //Do something;
}
else
{
    //Then go back to a switch statement inside the else for the remaining cases if you really need to
}

이 배율입니다 자네들이야 수에 상관없이 구체화하십시오 사례.

해설 (0)

C # 에서 7 이제 [ 패턴 매칭 ] (https://visualstudiomagazine.com/articles/2017/02/01/pattern-matching.aspx) 할 수 있도록 다음과 같은 항목을

"'사샤프 스위치 (시대) { 경우 50: 큰 five-oh&quot 지브록 = ";; 브레이크. var 테스티지 사건 때 (새 List&lt int&gt ();; {cx3-80, 81, 82, 85, 86, 87, 88 84tb (83), 89}) 스콘테인스 (테스티지): 지브록 = &quot octogenarian";; 브레이크. var 테스티지 사건 때 (테스티지 > = 90) &amp. (테스티지 < = 99): 지브록 = &quot nonagenarian";; 브레이크. var 테스티지 사건 때 (테스티지 &gt, = 100): 지브록 = &quot centenarian";; 브레이크. 기본. 그냥 old&quot 지브록 = ";; 브레이크. } "'

해설 (0)

그냥 내가 할 수 있는 대화를 통해 추가할 4.6.2 닷넷 (.net) 는 또한 다음. 내가 일을 테스트하였습니다 코드 및 it for me.

여러 &quot OR&quot, 할 수도 있습니다. 명령문입니다 마찬가지로 다음과 같습니다.

            switch (value)
            {
                case string a when a.Contains("text1"):
                    // Do Something
                    break;
                case string b when b.Contains("text3") || b.Contains("text4") || b.Contains("text5"):
                    // Do Something else
                    break;
                default:
                    // Or do this by default
                    break;
            }

경우 (value) 일치시킵니다 어레이에서는 확인할 수 있습니다.

            string[] statuses = { "text3", "text4", "text5"};

            switch (value)
            {
                case string a when a.Contains("text1"):
                    // Do Something
                    break;
                case string b when statuses.Contains(value):                        
                    // Do Something else
                    break;
                default:
                    // Or do this by default
                    break;
            }
해설 (0)

이를 위해 사용하는 것과 goto 문. 예:

    switch(value){
    case 1:
        goto case 3;
    case 2:
        goto case 3;
    case 3:
        DoCase123();
    //This would work too, but I'm not sure if it's slower
    case 4:
        goto case 5;
    case 5:
        goto case 6;
    case 6:
        goto case 7;
    case 7:
        DoCase4567();
    }
해설 (5)