7

C# 8 では、switch 式が導入されました。switch 式が網羅的でない場合はどうなりますか? つまり、考えられるすべての値をテストしないとどうなるでしょうか。

    static void Main(string[] args)
    {
        int x = 1;
        int imExhaustive = x switch
        {
            3 => 4,
            _ => 0   // x = 1 matches this
        };
        int okFine = x switch
        {
            1 => 4   // x = 1 matches this
        };
        int noMatch = x switch
        {
            3 => 4   // No match
        };
    }
4

3 に答える 3

1

依存します。

一致する場合: 一致し、すべて問題ありません。

一致しない場合: ASwitchExpressionExceptionがスローされます。

ベスト プラクティスは、徹底的なスイッチ式を記述することです。そうしないと何も爆発しないので、運が良かっただけかもしれません。

switch 式が網羅的でない場合、コンパイラは警告しますが、エラーではなく、とにかくコンパイルして実行します。

(これに遭遇したので、共有したいと思いました-ドキュメントにはまだありませんが、C#8はまだプレビュー段階です)

于 2019-05-09T21:54:00.797 に答える