Возвращение значения и оператор return

Последнее обновление: 10.11.2021

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

Но методы также могут возвращать некоторое значение. Для этого применяется оператор return, после которого идет возвращаемое значение:

return возвращаемое значение;

Например, определим метод, который возвращает значение типа string:

string GetMessage()
{
	return "Hello";
}

Метод GetMessage имеет тип string, следовательно, он должен возвратить строку. Поэтому в теле метода используется оператор return, после которого указана возвращаемая строка.

При этом методы, которые в качестве возвращаемого типа имеют любой тип, кроме void, обязательно должны использовать оператор return для возвращения значения. Например, следующее определение метода некорректно:

string GetMessage()
{
	Console.WriteLine("Hello");
}

Также между возвращаемым типом метода и возвращаемым значением после оператора return должно быть соответствие. Например, в следующем случае возвращаемый тип - string, но метод возвращает число (тип int), поэтому такое определение метода некорректно:

string GetMessage()
{
	return 3;	// Ошибка! Метод должен возвращать строку, а не число
}

Результат методов, который возвращают значение, мы можем присвоить переменным или использовать иным образом в программе:

string GetMessage()
{
	return "Hello";
}

string message = GetMessage();	// получаем результат метода в переменную message
Console.WriteLine(message);		// Hello

Метод GetMessage() возвращает значение типа string. Поэтому мы можем присвоить это значение какой-нибудь переменной типа string: string message = GetMessage();

Либо даже передать в качестве значения параметру другого метода:

string GetMessage()
{
	return "Hello";
}
void PrintMessage(string message)
{
	Console.WriteLine(message);
}
PrintMessage(GetMessage());

В вызове PrintMessage(GetMessage()) сначада вызывается метод GetMessage() и его результат передается параметру message метода PrintMessage

После оператора return также можно указывать сложные выражения или вызовы других методов, которые возвращают определенный результат. Например, определим метод, который возвращает сумму чисел:

int Sum(int x, int y)
{
    return x + y;
}

int result = Sum(10, 15);   // 25
Console.WriteLine(result);   // 25

Console.WriteLine(Sum(5, 6));   // 11

Метод Sum() имеет тип int, следовательно, он должен возвратить значение типа int - целое число. Поэтому в теле метода используется оператор return, после которого указано возвращаемое число (в данном случае результат суммы переменных x и y).

Сокращенная версия методов с результатом

Также мы можем сокращать методы, которые возвращают значение:

string GetMessage()
{
	return "hello";
}

аналогичен следующему методу:

string GetMessage() => "hello";

А метод

int Sum(int x, int y)
{
    return x + y;
}

аналогичен следующему методу:

int Sum(int x, int y) => x + y;

Выход из метода

Оператор return не только возвращает значение, но и производит выход из метода. Поэтому он должен определяться после остальных инструкций. Например:

string GetHello()
{
	return "Hello";
	Console.WriteLine("After return");
}

С точки зрения синтаксиса данный метод корректен, однако его инструкция Console.WriteLine("After return") не имеет смысла - она никогда не выполнится, так как до ее выполнения оператор return возвратит значение и произведет выход из метода.

Однако мы можем использовать оператор return и в методах с типом void. В этом случае после оператора return не ставится никакого возвращаемого значения (ведь метод ничего не возвращает). Типичная ситуация - в зависимости от опеределенных условий произвести выход из метода:

void PrintPerson(string name, int age)
{
    if(age > 120 || age < 1)
    {
        Console.WriteLine("Недопустимый возраст");
        return;
    }
    Console.WriteLine($"Имя: {name}  Возраст: {age}");
}

PrintPerson("Tom", 37);         // Имя: Tom  Возраст: 37
PrintPerson("Dunkan", 1234);    // Недопустимый возраст

Здесь метод PrintPerson() в качестве параметров принимает имя и возраст пользователя. Однако в методе вначале мы проверяем, соответствует ли возраст некоторому диапазону (меньше 120 и больше 0). Если возраст находится вне этого диапазона, то выводим сообщение о недопустимом возрасте и с помощью оператора return выходим из метода. После этого метод заканчивает свою работу.

Однако если возраст корректен, то выводим информацию о пользователе на консоль. Консольный вывод:

Имя: Tom  Возраст: 37
Недопустимый возраст
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850