2012-06-27 12 views
5

estoy revisando algo de código en el proyecto Hace poco se unió, y en una C# Win formularios de solicitud de.NET 3.5 encontré esto:EndPoint: sintaxis en C# - ¿Qué es esto?

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

Cuando haga clic en "EndPoint/Ir a Definición " dice " No se puede navegar hasta el punto final " pero el proyecto en su conjunto es bastante pequeño y se compila/ejecuta sin error, por lo que no es una referencia faltante ni nada.

¿Qué es EndPoint y cuál es esta sintaxis con el nombre: {}?

+8

matar al desarrollador original que lo escribió, es un 'goto'! –

+0

¡Es una etiqueta! ¿Qué está haciendo eso en su proyecto Win Forms? –

+0

Santa mierda: p No he visto uno de esos en años, incluso en C++. Ni siquiera sabía que conservaban esa función en C#: p –

Respuesta

5

Es para goto. Ver: http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

La sintaxis con los dos puntos especifica las etiquetas donde la sentencia goto transferirá el control. Usted puede usarlo en C#, pero la mayoría de los desarrolladores tienden a evitarlo. A veces puede ser útil para salir de bucles anidados (eso es lo mejor que puedo llegar a un uso "legítimo")

Aquí es una buena valoración crítica sobre algunos de los usos más útiles de goto: http://weblogs.asp.net/stevewellens/archive/2009/06/01/why-goto-still-exists-in-c.aspx

EDITAR: solo para comentar sobre el error que tienes sobre ir a la definición, eso es comprensible. No hay una fuente de "definición" para la etiqueta. Tal vez "vaya a definición" en el goto Endpoint; podría saltar a la etiqueta, pero no estoy seguro, nunca lo intenté. Si su código que tiene allí solo tiene la etiqueta Endpoint: pero no goto Endpoint; en ninguna parte, entonces debería ser seguro eliminar la etiqueta porque (supongo que) es un remanente no utilizado del código anterior.

+0

Bueno, no es una declaración de" caso " ; no es lo mismo que cambiar/caso si eso es lo que estás pensando. –

+1

Touche, me refería a la etiqueta :) Mis cabezas en todas partes hoy. –

2

Otros han explicado qué es EndPoint:. Las llaves adicionales están creando un nuevo alcance. Al crear un alcance interno puede hacer algo como esto

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 se olvidó de la pregunta sobre la sintaxis '{}'. –

Cuestiones relacionadas