2011-03-18 31 views
5

是否有.NET替換代碼的方式,其中的間隔像有沒有一種優雅的方法可以在處理間隔時通過開關等東西來取代?

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 
     } 

的東西更優雅像switch語句相比,(我想在Javascript中「的情況下(< 10)」的作品,但在C# )?其他人是否也覺得這個代碼很醜陋?

回答

4

簡化:因爲這些都是否則,如果而不是僅僅如果,你並不需要檢查的上述條件的否定。也就是說,這相當於你的代碼:

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

真 - 爲什麼沒有R·看?爲什麼我不是? – Olaf 2011-03-18 14:40:47

2

既然你已經肯定compare >= 10第一if後,你真的不需要在第二下界測試(或任何其他的)if s ...

這不是很好,但switch最初是通過在C中散列實現的,因此它實際上比if...else if鏈更快。這樣的實現不能很好地轉化爲一般範圍,這也是爲什麼只允許不變的情況。

然而,對於例如你給你實際上可以這樣做:

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 2011-03-18 14:26:25

+0

@Justin,是的,我在發佈後想到了這個,但是決定忽略它......在這種情況下,你需要在前面加一個if或Math.Max(0,compare/10)表達。 – jswolf19 2011-03-18 14:30:35

+0

該問題的意圖更爲通用:是否存在覆蓋此類事物的通用代碼結構,並且如果間隔不規則,是否也適用? – Olaf 2011-03-18 14:43:11

相關問題