Бесплатный курс по csharp. Зарегистрируйтесь для отслеживания прогресса →

C#: Возврат значений

Методы в C# становятся по настоящему полезными, когда они начинают возвращать данные, вместо печати их на экран. Тогда мы можем их использовать для дальнейших вычислений. Посмотрите на пример:

var message = App.GreetHexlet();
Console.WriteLine(message);

Мы присваиваем переменной результат работы метода. Для работы такого кода, метод должен внутри себя использовать инструкцию return:

class App 
{
    // void мы заменили на string, потому что метод возвращает значение
    public static string GreetHexlet() 
    {
        var message = "Hello, Hexlet!";
        return message;
    }
}

return особая инструкция, которая берет выражение записанное справа и отдает его наружу, тому коду, который вызвал метод. Само выполнение метода на этом завершается, любой код после return не выполняется:

class App 
{
    public static string GreetHexlet()
    {
        var message = "Hello, Hexlet!";
        return message;
        Console.WriteLine("Я никогда не выполнюсь");
    }
}

Если метод возвращает значение, то его тип должен быть указан в определении метода. Здесь не получится использовать var, функция должна однозначно описывать свой возврат.

Для возврата не обязательно использовать переменную. Так как return работает с выражениями, то справа от него может появиться почти все что угодно. Здесь нужно руководствоваться принципами читаемости кода:

class App
{
    public static string GreetHexlet()
    {
        return "Hello, Hexlet!";
    }
}

И пример с вычислением:

public static int DoubleFive()
{
    return 5 + 5;
}

Вопрос на самопроверку. Что выведет этот код?

// Определение
public static int Run()
{
  return 5;
  return 10;
}

// Использование
App.run(); // => ?

Задание

Реализуйте статический метод GetCurrentYear() в классе App, который возвращает наружу текущий год

App.GetCurrentYear(); // => 2021

Для выполнения этого задания, вам понадобится выполнить несколько действий:

  • Получить текущую дату с помощью свойства DateTime.Now. Это свойство возвращает объект даты. В реальности у даты есть свойство Year, который выполняет нашу задачу. Но здесь мы хотим потренироваться
  • Преобразовать дату в строку с помощью метода ToString("yyyy-MM-dd"). В параметрах нужно указать желаемый формат строки: yyyy-mm-dd, например, 2021-11-05
  • Извлечь из нее год с помощью метода Substring()
  • Преобразовать год из строки в число с помощью метода Convert.ToInt32() и вернуть наружу

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе