是否可以使用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;
}
答案 0 :(得分:0)
我不确定您真正关心的是哪种实际情况,但是我们应该能够解决这个问题
我更改了一些名称,但假设使用枚举:
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
答案 1 :(得分:0)
switch
语句只能处理与常量的相等比较。因此非常有限。做您要问的唯一方法就是像这样愚蠢的事情:
switch (sampleEnum)
{
case sampleEnum.Set4:
break;
default:
Console.WriteLine("This only runs when Set4 is not set.");
break;
}
如果比较比较复杂,最好使用if
,它更灵活(而且我认为还是更容易阅读)。
if (!sampleEnum.HasFlag(Set4))
{
Console.WriteLine("This will run only when Set4 is not set.");
}