C# 7 – Выходные параметры методов

C# logo В C# 7 стало удобнее использовать методы, сигнатура которых содержит выходные параметры. Если раньше для них было необходимо заранее объявлять все переменные, которые будут использоваться в вызове, то с новыми возможностями языка код становится более компактным и понятным.

Предположим существует следующий метод, содержаний выходные параметры:

public bool TryGetValue(string key, out int code, out object value)
{
    // ...
}

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

int code;
object value;
if (TryGetValue(key, out code, out value)) {
    // ...
}

C# 7 позволяет объявлять переменные для выходных параметров непосредственно при вызове метода:

if (TryGetValue(key, out int code, out object value)) {
    // ...
}

Данный код полностью эквивалентен исходному примеру, включая область видимости объявленных переменных.

При таком варианте записи компилятор легко может вывести типы переменных. Поэтому С# 7 разрешает использовать здесь ключевое слово var:

if (TryGetValue(key, out var code, out var value)) {
    // ...
}

Иногда вызывающей стороне не нужны все выходные значения. В этом случае можно не объявлять переменные для ненужных параметров, а использовать специальную подстановку "out _":

// Игнорируем значение параметра code
if (TryGetValue(key, out _, out var value1)) {
    // ...
}
 
// Игнорируем все выходные значения
if (TryGetValue(key, out _, out _)) {
    // ...
}

Обратите что в записи "out _" указание типа или использование var не обязательно. Переменная не будет объявлена при любом варианте записи.

Добавить комментарий