Как выйти из функции в C#
Операторы перехода обычно используются для управления потоком выполнения программы. Другими словами, операторы перехода безоговорочно передают управление от одной точки исполняемой программы к другой.
Ниже приведены шесть операторов C#, отнесенных к категории операторов Jump.
- break;
- continue;
- Environment.Exit()
- goto;
- return;
- throw.
1. return
Самый распространенный способ - использовать ключевое слово return
. Оно позволяет вернуть значение из функции и завершить ее выполнение. Оператор return
завершает выполнение функции, в которой он появляется, а затем возвращает управление результату вызывающего метода, если он доступен. Однако если функция не имеет значения, оператор returnиспользуется без выражения.
public int Add(int a, int b)
{
return a + b;
}
Еще пример
using System;
class Test {
// Main Method
static public void Main() {
int[] Numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (int number in Numbers) {
// print only the first 10 numbers
if (number > 10) {
return;
}
return;
Console.Write($"{number} ");
}
}
}
Если функция не возвращает значение (void), вы можете использовать return; для выхода из функции.
2. throw
Вы можете использовать ключевое слово throw
, чтобы вызвать исключение и завершить выполнение функции. Исключения указывают на то, что произошла ошибка или изменилось выполнение программы. Оператор throwсоздает объект допустимого значения Exception classс использованием newключевого слова. Все классы исключений имеют свойства Stacktrace и Message. Обратите внимание, что допустимое исключение должно быть производным от класса Exception. Допустимый класс исключений включает ArgumentException
, InvalidOperationException
и NullReferenceException.IndexOutOfRangeException
public void Divide(int a, int b)
{
if (b == 0)
throw new DivideByZeroException("Cannot divide by zero");
int result = a / b;
Console.WriteLine($"Result: {result}");
}
Еще пример
using System;
class Test {
// Main Method
static public void Main() {
int[] Numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (int number in Numbers) {
// using try catch block to
// handle the Exception
try {
// print only the first 10 numbers
if (number > 10) {
Console.WriteLine();
throw new NullReferenceException("Number is greater than 10");
}
Console.Write($"{number} ");
} catch (Exception exp) {
Console.WriteLine(exp.Message);
return;
}
}
}
}
3. Environment.Exit()
В редких случаях, когда вам нужно завершить выполнение всей программы, вы можете использовать Environment.Exit(0)
. Это немедленно завершает работу программы.
static void Main(string[] args)
{
if (args.Length == 0)
{
Console.WriteLine("Please provide command line arguments.");
Environment.Exit(1);
}
// Продолжить выполнение программы
}
4. break и continue
В циклах вы можете использовать break
, чтобы выйти из текущего цикла, или continue
, чтобы пропустить текущую итерацию и перейти к следующей.
for (int i = 0; i < 10; i++)
{
if (i == 5)
continue; // Пропустить итерацию с i == 5
if (i == 8)
break; // Выйти из цикла
}
Оператор continue
пропускает выполнение блока кода, если определенное условие истинно. В отличие от break
оператора, continue
оператор передает управление в начало цикла. Ниже приведен пример кода, использующего foreach метод.
using System;
class Test {
// Main Method
static public void Main() {
int[] Numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (int oddNumber in Numbers) {
// print only the odd numbers 10 numbers
if (oddNumber % 2 == 0) {
continue;
}
Console.Write($"{oddNumber} ");
}
}
}
Оператор break
останавливает цикл там, где он присутствует. Затем, если доступно, управление перейдет к оператору, следующему за завершенным оператором. Если break
оператор присутствует во вложенном цикле, он завершает только те циклы, которые содержат оператор прерывания.
using System;
class Test {
// Main Method
static public void Main() {
int[] Numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
foreach (int number in Numbers) {
// print only the first 10 numbers
if (number > 10) {
break;
}
Console.Write($"{number} ");
}
}
}
5. return в async-функциях
В асинхронных функциях, помеченных ключевым словом async
, вы можете использовать return
для возврата значения или завершения функции.
async Task GetValueAsync()
{
await Task.Delay(1000);
return 42;
}
6. goto
Мы используем этот goto
оператор для передачи управления помеченному оператору в программе. Метка должна быть действительным идентификатором, помещенным перед gotoоператором.
Другими словами, он принудительно выполняет код на этикетке.
В приведенном ниже примере оператор goto
вызывает выполнение случая 5.
using System;
class Test {
// Main Method
static public void Main() {
int age = 18;
switch (age) {
case 5:
Console.WriteLine("5yrs is less than the recognized age for adulthood");
break;
case 10:
Console.WriteLine("Age 10 is still underage");
break;
case 18:
Console.WriteLine("18yrs! You are now an adult and old enough to drink");
// goto statement transfer
// the control to case 5
goto case 5;
default:
Console.WriteLine("18yrs is the recognized age for adulthood");
break;
}
}
}
Выбор способа выхода из функции зависит от контекста и требований вашего кода. Используйте return для возврата значений, throw для обработки исключений, Environment.Exit() для завершения программы, а break и continue - в циклах.
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.