C#switch语句的默认标签如何处理可以为空的枚举?

Tre*_*ack 54 c# null nullable switch-statement

C#switch语句的默认标签如何处理可以为空的枚举?

默认标签是否会捕获空值和任何未处理的案例?

Tre*_*ack 80

如果它为null,它将达到默认标签.

public enum YesNo
{
    Yes,
    No,
}

public class Program
{
    public static void Main(string[] args)
    {
        YesNo? value = null;
        switch (value)
        {
            case YesNo.Yes:
                Console.WriteLine("Yes");
                break;
            case YesNo.No:
                Console.WriteLine("No");
                break;
            default:
                Console.WriteLine("default");
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该程序将打印default.

除非处理null.

public class Program
{
    public static void Main(string[] args)
    {
        YesNo? value = null;
        switch (value)
        {
            case YesNo.Yes:
                Console.WriteLine("Yes");
                break;
            case YesNo.No:
                Console.WriteLine("No");
                break;
            case null:
                Console.WriteLine("NULL");
                break;
            default:
                Console.WriteLine("default");
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

打印NULL.

如果您有一个以后添加的未处理的枚举值:

public enum YesNo
{
    Yes,
    No,
    FileNotFound,
}

public class Program
{
    public static void Main(string[] args)
    {
        YesNo? value = YesNo.FileNotFound;
        switch (value)
        {
            case YesNo.Yes:
                Console.WriteLine("Yes");
                break;
            case YesNo.No:
                Console.WriteLine("No");
                break;
            default:
                Console.WriteLine("default");
                break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它仍然打印default.

  • 这是我喜欢C#而不是Java的原因之一. (3认同)