2010-07-22 40 views
44

Todavía soy bastante nuevo en C# y estoy teniendo dificultades para acostumbrarme a él en comparación con C/CPP.¿Cómo salir de un método sin salir del programa?

¿Cómo salir de una función en C# sin salir del programa como lo haría esta función?

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0) 
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n"; 
System.Environment.Exit(0); 

Esto no permitirá los tipos de devolución y si se deja solo continuará a través de la función desactivada. Lo cual es indeseable

+1

Por cierto, se llaman "métodos", no de "funciones" en estos días. –

+3

Huh ??? C/C++ tiene 'return;' para funciones 'void' ... –

+1

@John He estado programando en C# y en otros lenguajes OOP por un buen tiempo ahora y todavía los llamo funciones. (¡y solo tengo 19!) – Earlz

Respuesta

98

Hay dos formas de salir de un método temprano (sin salir del programa):

  • Use la palabra clave return.
  • Lance una excepción.

Las excepciones solo deben utilizarse en circunstancias excepcionales, cuando el método no puede continuar y no puede devolver un valor razonable que tenga sentido para la persona que llama. Por lo general, solo debes regresar cuando hayas terminado.

Si el método devuelve void entonces se puede escribir de retorno sin un valor de:

return; 

Específicamente acerca de su código:

  • No hay necesidad de escribir la misma prueba en tres ocasiones . Todas esas condiciones son equivalentes.
  • También debe utilizar llaves cuando se escribe una sentencia if para que quede claro qué declaraciones se encuentran dentro del cuerpo de la sentencia if:

    if (textBox1.Text == String.Empty) 
    { 
        textBox3.Text += "[-] Listbox is Empty!!!!\r\n"; 
    } 
    return; // Are you sure you want the return to be here?? 
    
  • Si está utilizando .NET 4 hay una método útil que dependiendo de sus requisitos puede considerar usar aquí: String.IsNullOrWhitespace.

  • Usted might quiere usar Environment.Newline en lugar de "\r\n".
  • Es posible que desee considerar otra forma de mostrar una entrada no válida que no sea escribir mensajes en un cuadro de texto.
+0

¡Era tan simple! ¡Solo regresa sin un valor! ¡Muchas gracias! Volvía con 0. =) – Nightforce2

+0

Estaba ingresando mensajes en el cuadro de estado para un aviso visual. ¡Buen consejo! Aprendo mucho como una oportunidad. – Nightforce2

+0

O 'string.IsNullOrEmpty' (pre .Net 4 grito de salida - que, por supuesto, no detecta cadenas de espacios en blanco). Lamentablemente, no todos nosotros podemos usar 4.0, todavía. –

0

Si la función es un vacío, el final de la función será return. De lo contrario, debe hacer un return someValue explícito. Como mencionó Mark, también puede hacer una excepción a throw. ¿Cuál es el contexto de tu pregunta? ¿Tiene una muestra de código más grande con la que mostrarle algunas formas de salir de la función?

+0

Lanzar una excepción en este caso no es una buena práctica – pungggi

6

Además de la respuesta de Mark, también debe tener en cuenta el alcance, que (como en C/C++) se especifica utilizando llaves. Por lo tanto:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0) 
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n"; 
return; 

siempre devolverá en ese punto. Sin embargo:

if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0) 
{ 
    textBox3.Text += "[-] Listbox is Empty!!!!\r\n"; 
    return; 
} 

sólo devolverá si la pelota entra a if comunicado.

+0

+1 Agregué ese punto a mi publicación. –

0

El problema básico aquí es que está confundiendo System.Environment.Exit para la devolución.

0

@ John, Earlz y Nathan. La forma en que lo aprendí en la universidad es: las funciones devuelven valores, los métodos no. En algunos idiomas, la sintaxis es/era realmente diferente. Ejemplo (sin lenguaje específico):

Method SetY(int y) ... 
Function CalculateY(int x) As Integer ... 

mayoría de los lenguajes ahora utilizan la misma sintaxis para ambas versiones, usando vacío como un tipo de retorno a decir que en realidad no es un tipo de retorno. Supongo que es porque la sintaxis es más consistente y más fácil cambiar de un método a otro, y viceversa.

0

me gustaría utilizar return null; para indicar que no hay datos a ser devueltos

Cuestiones relacionadas