C# 将布尔值指定给枚举类型C的数组#
从该枚举类型:C# 将布尔值指定给枚举类型C的数组#,c#,enums,boolean,C#,Enums,Boolean,从该枚举类型: public enum MySqlObjectType { Table = 1, Procedure = 2, View = 4, Function = 8, Trigger = 512, User = 128, Event = 256 } 我想做这样的东西: Options.Load[MySqlObjectType.Event] = true; Options.Load[MySqlObjectType.Function]
public enum MySqlObjectType
{
Table = 1,
Procedure = 2,
View = 4,
Function = 8,
Trigger = 512,
User = 128,
Event = 256
}
我想做这样的东西:
Options.Load[MySqlObjectType.Event] = true;
Options.Load[MySqlObjectType.Function] = false;
选项类中的字段应该是什么样子,这样我就可以做上面的事情了?有可能吗?您只需要一个字典来存储枚举->布尔键/值对:
public class Options
{
public Options()
{
Load = new Dictionary<MySqlObjectType, bool>();
}
public Dictionary<MySqlObjectType, bool> Load { get; set; }
}
请注意,所有值均应为2的幂且唯一
MySqlObjectType value = MySqlObjectType.Event | MySqlObjectType.User;
要检查是否设置了值,可以执行以下操作:
if ((value & MySqlobjectType.Event) == MySqlObjectType.Event) {
我认为您也可以在.NET Framework v4中这样做:
if (value.HasFlag(MySqlObjectType.Event)) {
您只需要一个字典来存储枚举->布尔键/值对:
public class Options
{
public Options()
{
Load = new Dictionary<MySqlObjectType, bool>();
}
public Dictionary<MySqlObjectType, bool> Load { get; set; }
}
请注意,所有值均应为2的幂且唯一
MySqlObjectType value = MySqlObjectType.Event | MySqlObjectType.User;
要检查是否设置了值,可以执行以下操作:
if ((value & MySqlobjectType.Event) == MySqlObjectType.Event) {
我认为您也可以在.NET Framework v4中这样做:
if (value.HasFlag(MySqlObjectType.Event)) {
创建单标志枚举的另一种方法是:
公共枚举MySqlObjectType
{
Table=1创建单标志枚举的另一种方法是:
公共枚举MySqlObjectType
{
Table=1记不太清楚了,但您是否需要用所有键预加载列表,或者在分配值之前至少检查键是否存在?否。使用字典,您可以只加载[key]=value;它将创建/分配它。建议使用TryGetValue(…)不过,要阅读字典。@约翰:谢谢,这很有帮助。我记不清了,但您是否需要在分配值之前,用所有键预加载列表,或者至少检查键是否存在?否。使用字典,您只需加载[key]=value;它就会创建/分配它。建议使用TryGetValue(…)不过,为了阅读字典。@john,谢谢,这是一个帮助。听起来像是位掩码(Flags
enum),一个简单的MySqlObjectType
字段可以处理所有这些操作。听起来像是位掩码(Flags
enum),一个简单的MySqlObjectType
字段可以处理所有这些操作。