首页 > 解决方案 > 是否可以使用带有枚举的 switch 语句来捕获未设置的标志

问题描述

是否可以使用 switch 语句来捕获枚举中未设置的标志?我试过附加一个!到sampleEnum.Unset1等的前面,但没有奏效。

public enum sampleEnum
{
    Set1   = 1,
    Set2   = 2,
    Unset4 = 4,
    Set8   = 8
}

switch (sampleEnum)
{
    case sampleEnum.Set1:
        Console.WriteLine("This should not run");
        break;
    case sampleEnum.Set2:
        Console.WriteLine("This should not run");
        break;
    case sampleEnum.Unset4:
        Console.WriteLine("This should run");
        break;
    case sampleEnum.Set8:
        Console.WriteLine("This should not run");
        break;
    default:
        break;
}

标签: c#enums

解决方案


我不是 100% 确定你关心的是什么真实情况,但我们应该能够解决这个问题

我更改了一些名称,但假设为 Enum :

public enum enumExampo
{
    Set1   = 1,
    Set2   = 2,
    Unset4 = 4,
    Set8   = 8,
    set9 = 9
}

我设置了一个方法,如:

public static void checkExampo(enumExampo exampo)
{
    switch (exampo)
    {
        case enumExampo.Set1:
            Console.WriteLine("This should not run");
            break;
        case enumExampo.Set2:
            Console.WriteLine("This should not run");
            break;
        case enumExampo.Unset4:
            Console.WriteLine("This should run");
            break;
        case enumExampo.Set8:
            Console.WriteLine("This should not run");
            break;
        case new enumExampo():
            Console.WriteLine("is a new Instance");
            break;
        default:
            Console.WriteLine($"Default, flagged for {exampo}");
            break;
    }
}

然后是用法:

 var sampleEnum = new enumExampo();
 var exNiner = enumExampo.set9;

 checkExampo(sampleEnum);
 checkExampo(exNiner);

在控制台中为我们提供以下结果:

是一个新的实例
默认值,标记为 set9


推荐阅读