2009-12-17 35 views
14

Dưới đây là một số câu hỏi mà tôi đã thu thập về lối ra chọn ...Tại sao tôi nên sử dụng lối ra chọn?

  1. Có lý do nào để sử dụng lối ra chọn trong VB.NET không?
  2. Lý do có liên quan gì đến hiệu suất không?
  3. Lối ra có chọn bằng break; không?

Ví dụ 1

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

end select 

Ví dụ 2

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

case "John" 
'... 
exit select 

case else 

end select 

Trả lời

30

Nó không phải là giống như sử dụng các từ khóa break với các câu lệnh switch từ các ngôn ngữ giống như C. Với switch, nếu bạn bỏ qua điều khiển ngắt, nó sẽ rơi vào trường hợp tiếp theo. Với một Visual Basic Select, kiểm soát không rơi qua; một break đã được ngụ ý.

Tuy nhiên, bạn có thể sử dụng nó làm điều khoản bảo vệ, để tránh cần phải lồng mã một cấp khác trong khối if. Ví dụ:

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 

Đó là một chút đẹp hơn so với mã tương đương này:

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 

Bất kỳ chênh lệch hiệu suất giữa hai mẫu này là gần như chắc chắn không đáng kể so với các yếu tố khác.

Một cách sử dụng khác là nếu bạn có nhiều trường hợp và một trong các trường hợp được đặt sao cho trận đấu có nghĩa là bạn muốn ngừng kiểm tra tất cả các trường hợp khác. Điều này đã xảy ra, và vì vậy bạn có thể chỉ có một tuyên bố trường hợp trống ở đó. Nhưng bạn cũng có thể thêm một lối ra chọn để làm cho nó rõ ràng để bảo trì mà bạn mong đợi trường hợp này không làm bất cứ điều gì khác.

+2

Tôi thực sự nghĩ rằng ví dụ thứ hai đẹp hơn nhiều so với ví dụ thứ hai bởi vì ví dụ thứ hai là cấu trúc thứ nhất và thứ nhất là không. Hướng dẫn phá vỡ dòng thực hiện (như Goto, Thoát, vv) không cấu trúc mã. –

+1

@SoMoS: Tôi muốn có các điều khoản bảo vệ ở đầu phương pháp để kiểm tra điều kiện tiên quyết, nhưng ở giữa trường hợp Chọn, tôi có xu hướng đồng ý với bạn rằng ví dụ thứ hai tốt hơn trong hầu hết các trường hợp. –

5

Vâng ... Nó giống như sử dụng một goto ... Một khi bạn tìm thấy trường hợp đúng không có sử dụng trong "thoát "trường hợp kể từ trong Visual Basic nó sẽ được đi ra ngoài. Trong C# bạn cần phải thoát khỏi trường hợp (trong trường hợp đó, với thời gian nghỉ).

Vấn đề là bạn có thể sử dụng nó ở giữa phạm vi của một trường hợp, một cái gì đó như:

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

Nó xấu xí, nhưng bạn có thể làm điều đó ...

+0

Thực tế là như vậy và do đó bạn nên tránh. –

Các vấn đề liên quan