C# 如何在if条件下使用标志
我有一个枚举的if条件。我的枚举是:C# 如何在if条件下使用标志,c#,conditional-statements,C#,Conditional Statements,我有一个枚举的if条件。我的枚举是: public enum EmploymentType { Type1 = 1, Type2 = 2, Type3 = 3 } 这个条件呢 EmploymentType type = EmploymentType.Type1 ; if (type.HasFlag(EmploymentType.Type1 | EmploymentType.Type2 )) //if (type == (EmploymentType.Type1 | Empl
public enum EmploymentType
{
Type1 = 1,
Type2 = 2,
Type3 = 3
}
这个条件呢
EmploymentType type = EmploymentType.Type1 ;
if (type.HasFlag(EmploymentType.Type1 | EmploymentType.Type2 )) //if (type == (EmploymentType.Type1 | EmploymentType.Type2 ))
{
return true;
}
else
{
return false;
}
此条件的预期结果为true,但结果为false。为什么?您的枚举没有
[Flags]
属性
同时将if语句更改为
if (type.HasFlag(EmploymentType.Type1) || type.HasFlag(EmploymentType.Type2))
您的枚举没有
[Flags]
属性
同时将if语句更改为
if (type.HasFlag(EmploymentType.Type1) || type.HasFlag(EmploymentType.Type2))
|
并不意味着你认为它是什么,最好现在就不解释它。重要的是要测试“如果a或b”,您可以使用if(a | | b)
:
|
并不意味着你认为它是什么,最好现在就不解释它。重要的是要测试“如果a或b”,您可以使用if(a | | b)
:
这里有几件事你做错了:
- 您的枚举没有
属性。HasFlags设计为仅用于具有此属性集的枚举[Flags]
- 你不遵守国旗公约。除非
是Type3
和Type1
的组合,否则它的值应该是Type2
,而不是4
。请仔细阅读中的文档3
- 您的期望是错误的:
只返回设置了Flag1和Flag2的true,因为您是按位或按位设置Flag1和Flag2,并检查这些位是否已设置。有关详细信息,请查看HasFlag(Flag1 | Flag2)
因此,忘记标记的事情,只使用常规枚举匹配(例如
type==EmploymentType.Type1 | type==EmploymentType.Type2
或开关
语句)而不是hasvags
方法。这里有几件事情你做错了:
- 您的枚举没有
属性。HasFlags设计为仅用于具有此属性集的枚举[Flags]
- 你不遵守国旗公约。除非
是Type3
和Type1
的组合,否则它的值应该是Type2
,而不是4
。请仔细阅读中的文档3
- 您的期望是错误的:
只返回设置了Flag1和Flag2的true,因为您是按位或按位设置Flag1和Flag2,并检查这些位是否已设置。有关详细信息,请查看HasFlag(Flag1 | Flag2)
因此,忘记标记的事情,只需使用常规枚举匹配(例如
type==EmploymentType.Type1 | type==EmploymentType.Type2
或开关
语句)而不是haslags
方法。使用[flags]时,枚举值必须以基数2(二进制)为单位
[旗帜]
枚举日2
{
无=0x0,
星期日=0x1,
星期一=0x2,
星期二=0x4,
星期三=0x8,
星期四=0x10,
星期五=0x20,
星期六=0x40
}
[旗帜]
公众宠物{
无=0,
狗=1,
Cat=2,
鸟=4,
兔子=8,
其他=16
}
使用[Flags]时,枚举值必须为基数2(二进制) [旗帜] 枚举日2 { 无=0x0, 星期日=0x1, 星期一=0x2, 星期二=0x4, 星期三=0x8, 星期四=0x10, 星期五=0x20, 星期六=0x40 } [旗帜] 公众宠物{ 无=0, 狗=1, Cat=2, 鸟=4, 兔子=8, 其他=16 }
为什么不,
if(type==EmploymentType.Type1 | type==EmploymentType.Type2)
请阅读以下内容:。为什么不,if(type==EmploymentType.Type1 | type==EmploymentType.Type2)
请阅读:。枚举值不是二的幂,因此,将它们视为标志不起作用。我觉得奇怪的是,他通常使用标志(在if语句中),没有注意到枚举中的第三个值实际上不是4…枚举值不是二的幂,因此将它们视为标志不起作用。我觉得奇怪的是,他通常使用标志(在if语句中),没有注意到枚举中的第三个值实际上不是4…希望看到DogBirdRabbit;)我很想看到一只狗
[Flags]
enum Days2
{
None = 0x0,
Sunday = 0x1,
Monday = 0x2,
Tuesday = 0x4,
Wednesday = 0x8,
Thursday = 0x10,
Friday = 0x20,
Saturday = 0x40
}
[Flags]
public enum Pet {
None = 0,
Dog = 1,
Cat = 2,
Bird = 4,
Rabbit = 8,
Other = 16
}