[英]Store multiple true values with an enum
我最近开始使用枚举来更有效地在数据库中存储信息。 我想知道是否有某种方法可以使用它们来存储多个真实值。 详细地说,在GenderEnum
这样的枚举中,我会将男性存储为 0,女性存储为 1,OtherUnclear 存储为数据库中的 3。
public enum GenderEnum : short
{
Male,
Female,
OtherUnclear
}
但是如果我想存储多个真值呢? 例如种族,某人可能是多种族的。 我将如何有效地将黑白相间的人存储在数据库中?
public enum RaceEnum : short
{
White,
Black,
Hispanic,
Asian,
Native,
Unclear
}
您可以使用允许与逻辑 OR 运算符按位混合的flags 属性,并使用 0 和 1 之后的二进制值序列将每个值设置为 2 的倍数:
[Flags]
public enum EthnicGroup : short
{
White = 0,
Black = 1,
Hispanic = 2,
Asian = 4,
Native = 8,
Unclear = 16
}
您可以使用 Enum.HasFlag 方法检查变量是否设置了标志。
例子
var somehuman = EthnicGroup.Black | EthnicGroup.Hispanic;
if ( somehuman.HasFlag(EthnicGroup.Asian) ) ...
资源
https://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators
如果您希望枚举类型表示选择的组合,请为这些选择定义枚举成员,以便单个选择是位字段。 要指示枚举类型声明位字段,请将Flags
属性应用于它。
下面是一个简单的例子。
[Flags]
public enum Days
{
None = 0b_0000_0000, // 0
Monday = 0b_0000_0001, // 1
Tuesday = 0b_0000_0010, // 2
Wednesday = 0b_0000_0100, // 4
Thursday = 0b_0000_1000, // 8
Friday = 0b_0001_0000, // 16
Saturday = 0b_0010_0000, // 32
Sunday = 0b_0100_0000, // 64
Weekend = Saturday | Sunday
}
public class FlagsEnumExample
{
public static void Main()
{
Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
Console.WriteLine(meetingDays);
// Output:
// Monday, Wednesday, Friday
Days workingFromHomeDays = Days.Thursday | Days.Friday;
Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
// Output:
// Join a meeting by phone on Friday
bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
// Output:
// Is there a meeting on Tuesday: False
var a = (Days)37;
Console.WriteLine(a);
// Output:
// Monday, Wednesday, Saturday
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.