2012-06-27 32 views
5

Tôi đang xem xét một số mã trên dự án Gần đây tôi tham gia, và trong một C# Win Forms Application cho .NET 3.5 Tôi thấy điều này:EndPoint: Cú pháp trong C# - đây là gì?

public void foo() 
{ 
    //Normal code for function foo. 

//This is at the end and it is left-indented just as I put it here. 
EndPoint: 
    { 
    } 
} 

Khi tôi bấm vào nút "EndPoint/Go To Định nghĩa " nó nói " Không thể điều hướng đến điểm cuối " nhưng dự án nói chung là khá nhỏ và biên dịch/chạy mà không có lỗi, do đó, nó không phải là một tham chiếu bị thiếu hoặc bất cứ điều gì.

EndPoint là gì và cú pháp này có tên gì: {}?

+8

giết nhà phát triển ban đầu đã viết nó, đó là một 'goto'! –

+0

Đó là một nhãn! Điều gì đang làm trong dự án Win Forms của bạn? –

+0

Holy crap: p Tôi đã không nhìn thấy một trong những người trong năm ngay cả trong C + +. Tôi thậm chí không biết họ đã giữ tính năng đó trong C#: p –

Trả lời

5

Mã số cho goto. Xem: http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

Cú pháp có dấu hai chấm chỉ định nhãn nơi câu lệnh goto sẽ chuyển quyền kiểm soát. Bạn có thể sử dụng nó trong C#, nhưng hầu hết các nhà phát triển có xu hướng tránh nó. Đôi khi nó có thể hữu ích để thoát ra khỏi vòng lặp lồng nhau (đó là tốt nhất mà tôi có thể đưa ra một cách sử dụng "hợp pháp")

Dưới đây là một writeup đẹp về một số tập quán hữu ích hơn của goto: http://weblogs.asp.net/stevewellens/archive/2009/06/01/why-goto-still-exists-in-c.aspx

EDIT: Chỉ cần để bình luận về lỗi bạn nhận được về đi để định nghĩa, đó là dễ hiểu. Không có nguồn "định nghĩa" cho nhãn. Có lẽ "đi đến định nghĩa" trên goto Endpoint; có thể nhảy đến nhãn, nhưng tôi không chắc chắn - không bao giờ thử nó. Nếu mã của bạn mà bạn có ở đó chỉ có nhãn Endpoint: nhưng không có goto Endpoint; ở bất kỳ đâu, thì sẽ an toàn để xóa nhãn vì (tôi giả định) đó là phần còn lại chưa sử dụng của mã cũ.

+0

Vâng nó không phải là một" trường hợp "tuyên bố ; nó không giống như chuyển đổi/trường hợp nếu đó là những gì bạn đang suy nghĩ. –

+1

Touche, tôi có nghĩa là nhãn goto :) Đầu của tôi ở khắp mọi nơi ngày hôm nay. –

2

Những người khác đã giải thích những gì EndPoint: là. Niềng răng thừa đang tạo ra một phạm vi mới. Bằng cách tạo một phạm vi bên trong, bạn có thể làm điều gì đó như thế này

public Foo() 
{ 
    { 
     int bar = 10; 
     Console.WriteLine(bar); 
    } 

    Console.WriteLine(bar); //Error: "Cannot resolve symbol bar." It does not exist in this scope. 

    { 
     int bar = 20; //Declare bar again because the first bar is out of scope. 
     Console.Writeline(bar); 
    } 
} 
+0

+1 quên câu hỏi liên quan đến cú pháp '{}'. –