Visual Studio 2019为什么建议使用switch表达式而不是switch语句?

问题描述 投票:3回答:1

Visual Studio 2019建议将我编写的switch语句转换为switch expression(以下内容均包含在内)。

对于这样的简单示例,将其编写为表达式有任何技术或性能优势吗?例如,两个版本的编译方式是否不同?

Statement

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")
};
c# switch-statement switch-expression
1个回答
7
投票

在您提供的示例中,确实没有太多内容。但是,开关表达式对于一步一步声明和初始化变量很有用。例如:

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

目前(至少在VS2019中)switch表达式的一个缺点是,您不能针对单个条件设置断点,只能对整个表达式设置断点。但是,使用switch语句可以在单个case语句上设置断点。

© www.soinside.com 2019 - 2024. All rights reserved.