Как выйти из метода без выхода из программы? - PullRequest
56 голосов
/ 23 июля 2010

Я все еще довольно новичок в C # и мне трудно привыкнуть к нему по сравнению с C / CPP.

Как выйти из функции на C #, не выходя из программы, как это сделала бы эта функция?

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

Это не позволит возвращать типы и, если оставить их в покое, продолжит выполнение функцииотверзутся.Что нежелательно.

Ответы [ 6 ]

124 голосов
/ 23 июля 2010

Существует два способа досрочного выхода из метода (без выхода из программы):

  • Использование ключевого слова return.
  • Бросок исключения.

Исключения следует использовать только для исключительных обстоятельств - когда метод не может продолжаться и не может возвращать разумное значение, которое имело бы смысл для вызывающей стороны.Обычно, хотя вы должны просто вернуться, когда закончите.

Если ваш метод возвращает void, вы можете написать return без значения:

return;

В частности, о вашем коде:

  • Нет необходимости писать один и тот же тест три раза.Все эти условия эквивалентны.
  • Вы также должны использовать фигурные скобки при написании оператора if, чтобы было ясно, какие операторы находятся внутри тела оператора if:

    if (textBox1.Text == String.Empty)
    {
        textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
    }
    return; // Are you sure you want the return to be here??
    
  • Если вы используете .NET 4, есть полезный метод, который, в зависимости от ваших требований, вы можете использовать здесь: String.IsNullOrWhitespace .

  • Вы может захотеть использовать Environment.Newline вместо "\r\n".
  • Возможно, вы захотите рассмотреть другой способ отображения неверного ввода, кроме записи сообщений в текстовое поле.
8 голосов
/ 23 июля 2010

В дополнение к ответу Марка вам также необходимо знать область действия, которая (как в C / C ++) указывается с помощью фигурных скобок.Итак:

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

всегда будет возвращаться в этот момент.Однако:

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

вернется только в том случае, если он входит в этот оператор if.

1 голос
/ 06 августа 2013

Я бы использовал return null;, чтобы указать, что нет данных для возврата

0 голосов
/ 23 июля 2010

@ Джон, Эрлз и Натан. Я узнал об этом в универе: функции возвращают значения, а методы - нет. В некоторых языках синтаксис был / был фактически другим. Пример (без определенного языка):

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

Большинство языков теперь используют одинаковый синтаксис для обеих версий, используя void в качестве возвращаемого типа, чтобы сказать, что на самом деле нет возвращаемого типа. Я предполагаю, что это потому, что синтаксис более последовательный и его легче менять от метода к функции, и наоборот.

0 голосов
/ 23 июля 2010

Основная проблема здесь в том, что вы принимаете System.Environment.Exit за return.

0 голосов
/ 23 июля 2010

Если функция пуста, завершение функции будет return.В противном случае вам нужно сделать явное return someValue.Как уже упоминалось, Марк также может throw сделать исключение.Каков контекст вашего вопроса?У вас есть пример кода большего размера, чтобы показать вам несколько способов выхода из функции?

...