【问题标题】:C# Settings with Flag Enums带有标志枚举的 C# 设置
【发布时间】:2019-08-22 13:12:46
【问题描述】:

我将枚举作为标志,例如:

[Flags]
public enum ResultValues
{
    None = 0,
    Red = 1,
    Yellow = 2,
    Green = 4,
    Other = 8
};

在我的代码中,我可以或连接这些标志并且一切正常。

现在我将这种枚举类型的变量存储在设置中。 如果我添加一个设置条目,我可以设置为从上面键入枚举并选择/设置其中一个(!)作为默认值(例如绿色)。

<Setting Name="FilterResult" Type="MyNamespace.ResultValues" Scope="User">
  <Value Profile="(Default)">Green</Value>
</Setting>

但是如何将值的组合存储为默认值 - 因为我可以在代码中使用

ResultValues.Red | ResultValues.Yellow | ResultValues.Green | ResultValues.Other

【问题讨论】:

  • 这些是什么类型的设置(即,这是用于什么类型的应用程序)以及您如何设置值?
  • 您可以将设置存储为整数。 Red + Yellow = 3。然后您可以将 3 解析为 Red |黄色带功能。
  • @Seabizkit 在处理按位标志时,0 始终意味着无,因为它的状态会将所有位设置为 0。否则,值 3 将意味着无和红色,这是没有意义的。跨度>
  • @juharr 是的,对不起,你说得非常正确。生病删除...但他不会仍然存储 15
  • @Seabizkit 这是所有 4 个组合的值,可以很好地存储在数据库中,但在 xml 文件中,您通常需要更易读的内容,例如建议的逗号分隔名称。

标签: c# .net enums


【解决方案1】:

您可以通过用逗号分隔值来存储它们:

<Value Profile="(Default)">Green, Other</Value>

内置解析器会将这样的字符串转换为正确的“组合”枚举值:

ResultValues.Green | ResultValues.Other

【讨论】:

    【解决方案2】:

    逗号分隔:

    Flags f = Enum.Parse<Flags>("Red,Yellow,Green");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多