【问题标题】:Storing an enumerated bit mask in settings file C#在设置文件 C# 中存储枚举位掩码
【发布时间】:2012-06-21 04:27:45
【问题描述】:

我有一个应用程序支持多种不同的可视项组合。每个视图都可以通过单击其相应的树节点来打开和关闭。问题是我不想将每个单独的 node.checked 布尔值存储在我的 .settings 文件中的单独布尔值中。

所以我目前正在尝试使用位掩码,但是我不知道如何将该类型添加到设置文件编辑器的可选类型中。

我应该怎么做才能使它成为可选择的保存类型?

【问题讨论】:

    标签: c# visual-studio-2010 settings


    【解决方案1】:

    枚举类型在幕后是一个 Int32 - 事实上,枚举类型的变量可以分配任何整数值,即使这些值不在原始枚举中。如果您在设置中使用整数类型,则可以将其转换为您定义的枚举类型以使用它。没有检查整数值是否由枚举定义。

    请小心在设置文件中为此使用位掩码,因为可能难以计算出设置的值。例如,如果您希望第 1 位和第 3 位设置为 true,则必须放入设置文件中的值将是“5”,因为这是将第一个和第三个位设置为 1 的整数。

    在代码中,您可以使用位移运算符 << 来更轻松地读取值,或者在 .NET 4 及更高版本中使用 Enum.HasFlag (http://msdn.microsoft.com/en-us/library/system.enum.hasflag.aspx)。

    【讨论】:

      【解决方案2】:

      如果您希望您的自定义类型在 winforms 设置中可设置,您必须定义一个 TypeConverter 以从字符串转换回字符串。

      【讨论】:

        【解决方案3】:

        您可以只使用Int32 类型。位掩码是整数(4 字节)或其他指定整数类型(例如Int16)中的非零位集合

        【讨论】:

        • 如何将 Flags 转换为 int?
        • @John 你的枚举已经是内存中的一个 int 了。 [标志] 只是一个属性。要将 enum 转换为 int,您可以使用显式转换,例如int a = (int)yourEnumVariable;
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-16
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        相关资源
        最近更新 更多