Как выйти из метода без выхода из программы?
Я все еще довольно новичок в С#, и мне сложно привыкнуть к нему по сравнению с C/CPP.
Как выйти из функции на С# без выхода из программы, как эта функция будет?
if (textBox1.Text == "" || textBox1.Text == String.Empty || textBox1.TextLength == 0)
textBox3.Text += "[-] Listbox is Empty!!!!\r\n";
System.Environment.Exit(0);
Это не позволит возвращать типы, и если их оставить в покое, он продолжит работу без функции. Что нежелательно.
Ответы
Ответ 1
Есть два способа выйти из метода раньше (без выхода из программы):
- Используйте ключевое слово
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"
.
- Возможно, вам захочется рассмотреть другой способ отображения недопустимого ввода, отличного от написания сообщений в текстовое поле.
Ответ 2
В дополнение к ответу "Марк" вам также нужно знать область, которую (как в 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
.
Ответ 3
Если функция является пустой, завершение функции будет return
. В противном случае вам нужно сделать явный return someValue
. Как отметил Марк, вы также можете исключить throw
исключение. Каков контекст вашего вопроса? У вас есть более крупный пример кода, с помощью которого можно показать некоторые способы выхода из этой функции?
Ответ 4
Основная проблема заключается в том, что вы ошибаетесь в System.Environment.Exit для возврата.
Ответ 5
@Джон, Эрлц и Натан. Как я узнал об этом в uni: функции возвращают значения, а методы - нет. В некоторых языках синтаксис/фактически был другим. Пример (нет конкретного языка):
Method SetY(int y) ...
Function CalculateY(int x) As Integer ...
Большинство языков теперь используют один и тот же синтаксис для обеих версий, используя void как возвращаемый тип, чтобы сказать, что на самом деле это не тип возврата. Я предполагаю это, потому что синтаксис более согласован и легче изменяется от метода к функции, и наоборот.
Ответ 6
Я бы использовал return null;
, чтобы указать, что нет данных для возврата