2011-03-18 3 views
5

간격 switch 문 같은 더 우아한 방법으로인터벌을 처리 할 때 switch와 같은 것으로 대체 할 수있는 우아한 방법이 있습니까?

if (compare < 10) 
     { 
      // Do one thing 
     } 
     else if (10 <= compare && compare < 20) 
     { 
      // Do another thing 
     } 
     else if (20 <= compare && compare < 30) 
     { 
      // Do yet another thing 
     } 
     else 
     { 
      // Do nothing 
     } 

같은 비교 코드를 대체 할 .NET의 방법은, (I 자바 스크립트에서 생각하는 "경우 (< 10)"작품을 거기에 있지만 C#에서)? 다른 사람이이 코드를 찾지 못하는 것입니까?

답변

4

한 단순화 :이이기 때문에 모든 다른-경우 대신 단지 경우, 당신은 이전 조건의 부정을 확인 할 필요가 없습니다. 즉,이 코드에 해당 :

이미 첫번째 ifcompare >= 10, 당신은 정말 하한 두 번째에 테스트 (또는 다른 어떤)을 필요로하지 않는다는 것을 재확인 한 이후
if (compare < 10) 
{ 
    // Do one thing 
} 
else if (compare < 20) 
{ 
    // Do another thing 
} 
else if (compare < 30) 
{ 
    // Do yet another thing 
} 
else 
{ 
    // Do nothing 
} 
+0

사실 :

그러나, 예를 들어, 당신은 당신이 실제로 뭔가를 할 수있는 줄? 내가 왜 안했어? – Olaf

2

if s ...

실제로는 switch이 C에서 해시로 구현되었으므로 if...else if 체인보다 실제로 빠릅니다. 이러한 구현은 일반적인 범위로 잘 변환되지 않으며, 이는 또한 상수의 경우 만 허용되는 이유이기도합니다. 왜 R 번호이 보지 않았다 -

switch(compare/10) { 
    case 0: 
     // Do one thing 
    break; 
    case 1: 
     // Do another thing 
    break; 
    case 2: 
     // Do yet another thing 
    break; 
    default; 
     // Do nothing 
    break; 
} 
+0

'switch (compare/10)'에 관해서,'compare'가 음수이면? – Justin

+0

@Justin, 예, 게시 후 생각했지만 무시해 버리기로 결정했습니다. 어떤 경우에는 앞면에'if'가 필요하거나'Math.Max ​​(0, compare/10)'가 필요합니다. 표현. – jswolf19

+0

질문의 의도는 좀 더 일반적입니다. 이러한 종류의 문제를 다루는 일반 코드 구조가 있고 간격이 불규칙하면 적용되는 일반적인 코드 구조가 있습니까? – Olaf

관련 문제