2010-07-22 2 views
44

Sono ancora abbastanza nuovo in C# e sto avendo un momento difficile abituarsi ad esso rispetto a C/CPP.Come uscire da un metodo senza uscire dal programma?

Come si esce da una funzione su C# senza uscire dal programma come farebbe questa funzione?

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

Questo non permetterà tipi restituiti e se lasciato solo manterrà in corso tramite la funzione sturati. Che è indesiderabile

+1

proposito, si chiamano "metodi", non "funzioni" in questi giorni. –

+3

Huh ??? C/C++ ha 'return;' per le funzioni 'void' ... –

+1

@John Ho programmato in C# e altre lingue OOP per un buon tempo ora e le chiamo ancora funzioni. (e ho solo 19 anni!) – Earlz

risposta

98

Ci sono due modi per uscire un metodo precoce (senza chiudere il programma):

  • utilizza la parola chiave return.
  • Genera un'eccezione.

Le eccezioni devono essere utilizzate solo per circostanze eccezionali, quando il metodo non può continuare e non può restituire un valore ragionevole che avrebbe senso per il chiamante. Di solito però dovresti tornare quando hai finito.

Se il metodo restituisce void allora si può scrivere di ritorno senza un valore:

return; 

In particolare circa il vostro codice:

  • Non c'è bisogno di scrivere lo stesso test per tre volte . Tutte queste condizioni sono equivalenti.
  • Si dovrebbe anche usare le parentesi graffe quando si scrive un'istruzione if in modo che sia chiaro che le dichiarazioni sono all'interno del corpo del if:

    if (textBox1.Text == String.Empty) 
    { 
        textBox3.Text += "[-] Listbox is Empty!!!!\r\n"; 
    } 
    return; // Are you sure you want the return to be here?? 
    
  • Se si utilizza .NET 4 c'è un metodo utile che a seconda delle tue esigenze potresti voler considerare l'utilizzo qui: String.IsNullOrWhitespace.

  • Si might si desidera utilizzare Environment.Newline anziché "\r\n".
  • È possibile considerare un altro modo per visualizzare input non validi diversi dalla scrittura di messaggi in una casella di testo.
+0

Era così semplice! Basta tornare senza un valore! Molte grazie! Stavo tornando con 0. =) – Nightforce2

+0

Stavo inserendo messaggi nella casella di stato per un avviso visivo. Un buon consiglio però! Sto imparando tanto. – Nightforce2

+0

Oppure 'string.IsNullOrEmpty' (pre. Net 4 shout-out - che, naturalmente, non rileva stringhe di soli spazi bianchi). Purtroppo, non tutti noi possiamo usare 4.0, ancora. –

0

Se la funzione è vuota, terminando la funzione sarà return. Altrimenti, è necessario eseguire un esplicito return someValue. Come indicato da Mark, puoi anche fare un'eccezione a throw. Qual è il contesto della tua domanda? Avete un campione di codice più grande con cui mostrarvi alcuni modi per uscire dalla funzione?

+0

Lanciare un'eccezione in questo caso non è la migliore pratica – pungggi

6

Oltre alla risposta di Mark, è necessario essere a conoscenza dell'ambito, che (come in C/C++) viene specificato utilizzando le parentesi. Quindi:

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

tornerà sempre a quel punto. Tuttavia:

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

torneranno solo se si va in quella if dichiarazione.

+0

+1 Ho aggiunto quel punto al mio post. –

0

Il problema di base qui è che si sta scambiando System.Environment.Exit per la restituzione.

0

@John, Earlz e Nathan. Il modo in cui l'ho imparato a uni è: le funzioni restituiscono valori, i metodi no. In alcune lingue la sintassi è/era effettivamente diversa. Esempio (senza linguaggio specifico):

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

maggior parte dei linguaggi ora utilizzare la stessa sintassi per entrambe le versioni, utilizzando vuoto come un tipo di ritorno a dire che non in realtà non è un tipo di ritorno. Presumo che sia perché la sintassi è più coerente e più facile da cambiare da metodo a funzione e viceversa.

0

userei return null; per indicare che non ci sono dati da restituire