2012-06-27 32 views
5

我檢討我最近參加了項目的一些代碼,並在C#贏窗體應用.NET 3.5我發現這一點:EndPoint:C#中的語法 - 這是什麼?

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: 
    { 
    } 
} 

當我點擊「端點/轉到定義「它說」無法導航到端點「但整個項目非常小,編譯/運行沒有錯誤,所以它不是一個缺少的參考或任何東西。

EndPoint是什麼?這個語法的名稱是什麼:{}?

+8

殺死原來的開發者,寫了它,它是一個'goto'! –

+0

這是一個標籤!你在Win Forms項目中做了什麼? –

+0

神聖的廢話:P即使在C++中,我也沒有見過這些年。我甚至不知道他們在C#中保留了這個功能:p –

回答

5

其對於goto。請參閱:http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

帶冒號的語法指定goto語句將控件傳遞到的標籤。你可以用可以在C#中使用它,但是大多數開發者往往會避免它。有時候,它可以打破嵌套循環(這是我能拿出一個「合法」的使用是最好的)

這裏有一些goto比較有用的用途的一個很好的書面記錄有用:http://weblogs.asp.net/stevewellens/archive/2009/06/01/why-goto-still-exists-in-c.aspx

編輯:只是評論你去定義的錯誤,這是可以理解的。標籤沒有「定義」來源。 goto Endpoint;上的「定義」可能會跳轉到標籤,但我不確定 - 從未嘗試過。如果你在那裏的代碼只有Endpoint:標籤,但沒有goto Endpoint;任何地方,那麼刪除標籤應該是安全的,因爲(我假設)它是一個未使用的舊代碼殘餘。

+0

嗯,它不是一個「case」語句;這與開關/情況不一樣,如果這就是你的想法。 –

+1

Touche,我的意思是轉到標籤:)我今天到處都是頭。 –

2

其他人已經解釋了EndPoint:是什麼。額外的大括號正在創造一個新的範圍。通過創建一個內部範圍,你可以做這樣的事情

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忘了關於'{}'語法的問題。 –