2009-12-17 27 views
14

這裏有幾個問題我收集了有關退出選擇...我爲什麼要用exit select?

  1. 沒有任何理由使用出口在VB.NET選擇?
  2. 原因與性能有什麼關係?
  3. 退出選擇是否等於break;

例1

Select case Name 
case "Mary" 
'... 
case "John" 
'... 
case else 

end select 

例2

Select case Name 
case "Mary" 
'... 
exit select 

case "John" 
'... 
exit select 

case else 

end select 

回答

30

這不是與使用類似C語言的break關鍵字和switch語句相同。使用switch,如果您省略了中斷控制,它將轉入下一個案例。使用Visual Basic Select,控制不會通過;已經暗示了break

但是,您可以將它用作警戒子句,以避免需要在if塊中嵌套另一個級別的代碼。例如:

Select Case SomeEnumVar 
    Case SomeEnum.SomeValue1 
     If Not SomeCondition Then Exit Select 
     'Do something 
    Case SomeEnum.SomeValue2 
     'Do something else 
    Case Else 
     'Default case 
End Select 

這比該等效代碼更好一點:相比其他因素

Select Case SomeEnumVar 
    Case SomeEnum.SomeValue1 
     If SomeCondition Then 
      'Do something 
     End If 
    Case SomeEnum.SomeValue2 
     'Do something else 
    Case Else 
     'Default case 
End Select 

這兩個樣本之間的任何性能差異幾乎可以肯定是微不足道的。

另一個用途是,如果您有很多案例,並且其中一個案例被放置以便匹配意味着您想停止檢查所有其他案例。這已經發生了,所以你可能只是在那裏有一個空的case語句。但是你也可以添加一個Exit Select來讓維護者清楚你希望這種情況不會做其他事情。

+2

真的,第二個例子比第一個更好,因爲第二個例子是結構化的,第一個不是。中斷執行流程的指令(如轉到,退出等)解構代碼。 – 2009-12-18 09:23:50

+1

@SoMoS:我喜歡在方法開始時使用guard子句來檢查前提條件,但在Select Case中,我傾向於同意你的觀點,第二個例子在大多數情況下更好。 – 2009-12-18 14:30:21

5

嗯......它就像使用goto語句來......一旦你找到了正確的情況下,有退出在」沒有用「在Visual Basic中的案例將會出來。 在C#中,你需要退出案例(在這種情況下,中斷)。

的一點是,你可以在一個案範圍的中間使用它,像:

Case 1 
    Do something 
    Do something 
    Evaluate 
     exit select 
    Else 
     Do something 

這是醜陋的,但你可以做到這一點...

+0

確實如此,應該避免。 – 2015-10-07 09:35:19