Почему Visual Studio 2019 рекомендует выражение switch вместо оператора switch? - PullRequest
3 голосов
/ 16 апреля 2020

Visual Studio 2019 рекомендовала преобразовать записанное мною выражение switch в выражение switch (оба включены ниже для контекста).

Для такого простого примера, как это, есть ли или преимущество в производительности, чтобы написать это как выражение? Например, две версии компилируются по-разному?

Оператор

switch(reason)
{
    case Reasons.Case1: return "string1";
    case Reasons.Case2: return "string2";
    default: throw new ArgumentException("Invalid argument");
}

Выражение

return reason switch {
    Reasons.Case1 => "string1",
    Reasons.Case2 => "string2",
    _ => throw new ArgumentException("Invalid argument")
};

1 Ответ

7 голосов
/ 16 апреля 2020

В приведенном вами примере на самом деле не так много. Однако выражения переключения полезны для объявления и инициализации переменных за один шаг. Например:

var description = reason switch 
{
    Reasons.Case1 => "string1",
    Reasons.Case2 => "string2",
    _ => throw new ArgumentException("Invalid argument")
};

Здесь мы можем объявить и инициализировать description немедленно. Если бы мы использовали оператор switch, мы должны были бы сказать что-то вроде этого:

string description = null;
switch(reason)
{
    case Reasons.Case1: description = "string1";
                        break;
    case Reasons.Case2: description = "string2";
                        break;
    default:            throw new ArgumentException("Invalid argument");
}

Один недостаток выражений switch на данный момент (по крайней мере в VS2019) заключается в том, что вы не можете установить точку останова на индивидуальное состояние, только целое выражение. Однако с помощью операторов switch вы можете установить точку останова для отдельного оператора case.

...