Как выйти из метода, не выходя из программы?

Я все еще довольно плохо знаком с 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);

Это не позволит типы возврата, и, если оставлено в покое это будет продолжать продолжаться через неостановленную функцию. Который является нежелательным.

59
задан John Saunders 22 July 2010 в 23:30
поделиться

5 ответов

Есть два способа преждевременного выхода из метода (без выхода из программы):

  • Используйте ключевое слово return .
  • Вызвать исключение.

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

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

return;

Конкретно о вашем коде:

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

     if (textBox1.Text == String.Empty)
    {
    textBox3.Text + = "[-] Список пуст !!!! \ r \ n";
    }
    возвращение; // Вы уверены, что хотите, чтобы возврат был здесь ??
    
  • Если вы используете .NET 4, есть полезный метод, который, в зависимости от ваших требований, вы можете рассмотреть здесь: String.IsNullOrWhitespace .

  • Вы могли использовать Environment.Newline вместо "\ r \ n" .
  • Возможно, вы захотите рассмотреть другой способ отображения недопустимого ввода, кроме записи сообщений в текстовое поле.
133
ответ дан 24 November 2019 в 18:11
поделиться

В дополнение к ответу Марка, вам также нужно помнить об области видимости, которая (как и в 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 оператор.

8
ответ дан 24 November 2019 в 18:11
поделиться

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

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

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

0
ответ дан 24 November 2019 в 18:11
поделиться

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

0
ответ дан 24 November 2019 в 18:11
поделиться

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

0
ответ дан 24 November 2019 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: