簡體   English   中英

新的 C# 8.0 開關表達式的運算符優先級是什么?

[英]What is the operator precedence for the new C# 8.0 switch expressions?

我剛剛將我當前的項目升級到新發布的 .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);

我猜這個switchinput變量的綁定非常緊密,因此首先被評估。 事實上,當我輸入1時,它會打印Letter: a

但我現在的問題是:這種行為是否適用於任何運營商?

從我的實驗中,我無法確定上述假設不成立的情況,但這顯然並不意味着我沒有錯過任何情況。 文檔似乎也沒有在switch表達式的上下文中提及運算符優先級。 還是我在這里有一些更深的誤解?

Roslyn 的資料表明switch表達式確實具有相當高的優先級,但有些東西具有更高的優先級,例如范圍、一元運算符和強制轉換。 請參閱 Roslyn 源中的此處此處

演示SyntaxKind.LogicalNotExpression ( Precende.Unary ) 更高優先級的示例代碼:

var foo = false;
var bar = !foo switch {
    true => "true",
    false => "false"
};
Console.WriteLine(bar); // writes "true"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM