2013-09-06 54 views
10

Điều này không thực sự là một vấn đề, nhưng nhiều hơn một sự tò mò của tôi mà tôi đã không thể giải quyết bằng chính phương tiện của mình. Tôi chắc chắn sẽ không mất ngủ trên đó.Bỏ qua "Case" từ "Select ... Case" Statement

Trong VB.NET, cú pháp câu lệnh switch là (như được nêu trên MSDN here):

Select [ Case ] testexpression 
[ Case expressionlist 
    [ statements ] ] 
[ Case Else 
    [ elsestatements ] ] 
End Select 

Lưu ý rằng trong dòng đầu tiên, Case là trong dấu ngoặc vuông, nghĩa là nó là không bắt buộc.

Và quả thực, ví dụ sau biên dịch và thực thi trong cùng một cách như thể từ khóa Case đã được bao gồm, ít nhất, trong các ví dụ thô sơ Tôi đã thử:

Select myIntVar 
    Case 0 
     Return "Nothing" 
    Case 1 
     Return "Just one" 
    Case Else 
     Return "Something else" 
End Select 

Vì vậy câu hỏi của tôi là như theo sau: Ngoài cú pháp, có sự khác biệt bất kỳ sự khác biệt nào giữa việc mở câu lệnh chuyển đổi với SelectSelect Case hay không?

+0

Không có gì tôi có thể nghĩ đến. Nếu 'MSDN' không đề cập đến bất cứ điều gì người ta có thể giả định nó không. Tôi ghét giả định ... – OneFineDay

+0

câu hỏi thú vị, tôi đặt cược rằng "TRƯỜNG HỢP" là tùy chọn vì nó dường như xếp hàng với một tuyên bố chuyển đổi C# mà không có nó anyways (Có lẽ phần "CASE" chỉ là một carryover từ cũ vb), và Nó có thể biên dịch theo cùng một cách trong CLR –

+1

Một khía cạnh thú vị khác là mặc dù, theo MSDN, 'Case' là tùy chọn, nếu bạn bỏ nó ra, Visual Studio sẽ tự động thêm nó cho bạn. –

Trả lời

6

Tôi đã làm một thử nghiệm nhỏ. Tôi tạo thành một ứng dụng giao diện điều khiển nhỏ như vậy:

Module Module1 

    Sub Main() 
     Dim myStr As String = GetString(1) 
    End Sub 

    Private Function GetString(myIntVar) As String 
     Select myIntVar 
      Case 0 
       Return "Nothing" 
      Case 1 
       Return "Just one" 
      Case Else 
       Return "Something else" 
     End Select 
    End Function 

End Module 

Việc chạy đầu tiên là như hình trên, và sau đó tôi biên soạn nó một lần nữa chèn từ khóa Case.Tôi tháo rời cả hai thực thi được tạo ra sử dụng ILDasm và dán IL của GetString chức năng vào trang web diff trực tuyến này: http://www.diffchecker.com/9ef7z423

Trông với tôi như Select Case và đồng bằng cũ Select sự khác biệt hoàn toàn cú pháp (điều này là tất nhiên không bao gồm việc sử dụng Select trong Truy vấn LINQ).

+0

Tất nhiên, nếu bạn thiếu một số sắc thái tinh tế về ngôn ngữ (tôi không nghĩ rằng bạn đang có, như câu trả lời của tôi cho biết), bạn có thể đã biên soạn trong một trường hợp mà sắc thái không được tiếp xúc. I E. nếu nó ** đã làm ** tạo sự khác biệt, nó có thể là một số trường hợp cạnh mà ví dụ của bạn không sử dụng. –

+0

Lập trình, VB.Net tự động thêm 'Trường hợp' cho bạn khi chạy. Vì vậy, chắc chắn bạn sẽ có cùng một phản ứng. –

2

Tôi có thể nói rằng có không có sự khác biệt giữa hai hình thức. Tuy nhiên, bằng chứng duy nhất của tôi là bằng cách không có bất kỳ sự phân biệt nào. Thay vì xem Tham chiếu ngôn ngữ, địa điểm chính xác để xem nằm trong số Language Specification .

Trong phiên bản 11, trong phần 10.8.2, Select Case tuyên bố được thảo luận, và cú pháp được thể hiện là:

SelectStatement :: =
Select [Case] BiểuStatementTerminator
[CaseStatement +]
[CaseElseStatemen t]
End SelectStatementTerminator

Vì vậy, thì rõ ràng rằng phần này không bao gồm cả hai hình thức. Tuy nhiên, trong 5 đoạn trước đó (toàn bộ đặc điểm kỹ thuật cho các câu lệnh Chọn trường hợp) không có sự phân biệt nào được vẽ giữa hai biểu mẫu.

Tham chiếu cố gắng mô tả, cung cấp ví dụ và sử dụng ngôn ngữ lỏng lẻo (đôi khi). Các đặc điểm kỹ thuật nên được theo dõi để tạo ra một trình biên dịch Visual Basic. Nếu một cái gì đó là mất tích từ trước đây, sau đó nó chỉ có thể là một thiếu sót. Nếu một cái gì đó là mất tích sau này, sau đó nó không phải là chính thức một phần của ngôn ngữ.

0

Có lẽ nó chỉ là một sự khác biệt trong cú pháp, về mặt giữa các ngôn ngữ, chẳng hạn như VB và C#

một câu lệnh switch đòi hỏi sự đột phá từ khóa để thoát ra khỏi vòng lặp.

Không thể nghĩ ra bất cứ điều gì lớn, về sự khác biệt ... xin lỗi.

1

Tôi nghĩ rằng điều này xuất phát từ VB 6.0, trong đó Select Case là bắt buộc - Select không phải là một tuyên bố của riêng mình. Điều này có nghĩa rằng nó bây giờ chỉ là xuống sở thích cá nhân trong VB.NET.

Chỉnh sửa: Thật kỳ lạ, nếu bạn chọn bỏ qua nó, Visual Studio sẽ tự động thêm nó.