位标志
在C#中,使用带有[Flags]
特性的枚举来表示一组位标志是非常常见的需求。以下是如何独立使用每个标志、判断某个标志是否被设置以及设置某个标志的示例。
定义枚举
首先,定义一个带有[Flags]
特性的枚举:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Flags]
public enum GuidanceStatus : int
{
None = 0,
Lottery = 1,
EnterAdventure = 1 << 1,
SkillLevelUp = 1 << 2,
AutoDecompose = 1 << 3,
Equipment = 1 << 4,
PetEquipment = 1 << 5,
PetLevelUp = 1 << 6,
AutoAttack = 1 << 7,
All = int.MaxValue
}
设置标志
你可以通过使用位或运算符(|
)来设置一个或多个标志:
1
2
3
4
5
6
7
GuidanceStatus status = GuidanceStatus.None;
// 设置 Lottery 标志
status |= GuidanceStatus.Lottery;
// 设置 EnterAdventure 标志
status |= GuidanceStatus.EnterAdventure;
判断标志
你可以通过使用位与运算符(&
)来判断一个标志是否被设置:
1
2
3
4
5
6
7
8
9
if ((status & GuidanceStatus.Lottery) == GuidanceStatus.Lottery)
{
Console.WriteLine("Lottery flag is set.");
}
if ((status & GuidanceStatus.EnterAdventure) == GuidanceStatus.EnterAdventure)
{
Console.WriteLine("EnterAdventure flag is set.");
}
清除标志
你可以通过使用位与运算符和位取反运算符(& ~
)来清除一个标志:
1
2
3
4
5
// 清除 Lottery 标志
status &= ~GuidanceStatus.Lottery;
// 清除 EnterAdventure 标志
status &= ~GuidanceStatus.EnterAdventure;
示例代码
以下是一个完整的示例代码,展示了如何设置、判断和清除标志:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
[Flags]
public enum GuidanceStatus : int
{
None = 0,
Lottery = 1,
EnterAdventure = 1 << 1,
SkillLevelUp = 1 << 2,
AutoDecompose = 1 << 3,
Equipment = 1 << 4,
PetEquipment = 1 << 5,
PetLevelUp = 1 << 6,
AutoAttack = 1 << 7,
All = int.MaxValue
}
public class Program
{
public static void Main()
{
GuidanceStatus status = GuidanceStatus.None;
// 设置标志
status |= GuidanceStatus.Lottery;
status |= GuidanceStatus.EnterAdventure;
// 判断标志
if ((status & GuidanceStatus.Lottery) == GuidanceStatus.Lottery)
{
Console.WriteLine("Lottery flag is set.");
}
if ((status & GuidanceStatus.EnterAdventure) == GuidanceStatus.EnterAdventure)
{
Console.WriteLine("EnterAdventure flag is set.");
}
// 清除标志
status &= ~GuidanceStatus.Lottery;
// 判断标志
if ((status & GuidanceStatus.Lottery) == GuidanceStatus.Lottery)
{
Console.WriteLine("Lottery flag is still set.");
}
else
{
Console.WriteLine("Lottery flag is cleared.");
}
}
}
结果
运行上述代码,你会看到以下输出:
1
2
3
Lottery flag is set.
EnterAdventure flag is set.
Lottery flag is cleared.
这种方法可以方便地管理和操作多个标志位,非常适合用于需要表示和处理多种状态的场景。
本文由作者按照 CC BY 4.0 进行授权