5

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")
};
4

1 回答 1

10

在您给出的示例中,实际上并没有很多。但是,switch 表达式对于在一个步骤中声明和初始化变量很有用。例如:

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 语句上设置断点。

于 2020-04-16T09:55:17.313 回答