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
字段可以处理所有这些操作。