Jan*_*ann 4 c# operator-precedence switch-statement c#-8.0 switch-expression
我刚刚将当前项目升级到新发布的 .NET Standard 2.1 和 C# 8.0,并决定将一些大型switch语句转换为新的、更紧凑的表达式语法。
由于返回的值在某些计算中进一步使用,我想知道switch当输入变量位于运算符旁边时新表达式的行为如何。
以下面的字符串连接为例:
string input = Console.ReadLine();
string output = "Letter: " + input switch
{
"1" => "a",
"2" => "b",
_ => "else"
};
Console.WriteLine(output);
Run Code Online (Sandbox Code Playgroud)
我猜想它switch与变量的绑定非常强烈input,因此首先被评估。事实上,Letter: a当我输入时,会打印出这样的内容1。
但我现在的问题是:这种行为是否适用于任何运营商?
从我的实验中,我无法确定上述假设不成立的情况,但这显然并不意味着我没有错过任何情况。该文档似乎也没有提到switch表达式上下文中的运算符优先级。还是我这里有更深层次的误解?
Roslyn 来源表明,switch表达式确实具有相当高的优先级,但有些东西具有更高的优先级,例如范围、一元运算符和强制转换。请参阅Roslyn 源代码中的此处和此处。
演示SyntaxKind.LogicalNotExpression( Precende.Unary) 更高优先级的示例代码:
var foo = false;
var bar = !foo switch {
true => "true",
false => "false"
};
Console.WriteLine(bar); // writes "true"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
505 次 |
| 最近记录: |