C#:枚举值可以保存为设置吗?

时间:2011-08-25 22:05:34

标签: c# enums settings

可以使用C#的enum语法将Properties.Settings.Default["MySetting"]值保存为设置吗?我尝试在项目的属性页面中创建一个设置,但只有系统类出现在可用类型列表中。

如果可以,我该怎么办?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:15)

只需将其存储为int并在需要时将其转换。

Properties.Settings.Default["MySetting"] = myEnumValue;

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)settingValue;

如果您认为有必要,可以使用Enum.IsDefined(typeof(MyEnum), value)确保其有效。您还可以存储字符串值,以便在配置文件中使用人类可读的格式:

Properties.Settings.Default["MySetting"] = myEnumValue.ToString();

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)Enum.Parse( typeof(MyEnum), settingValue );

答案 1 :(得分:1)

这是一篇老文章,但我认为此解决方案值得发布,对于可能遇到相同问题的人。
基本上,它包括创建一个供主项目引用的新库,以便该库将枚举公开为一种新类型,可以从 Properties.Settings.settings 中进行选择。 就我而言,我想列举严重程度。

新图书馆
在当前解决方案下,使用以下代码创建一个新的空类库:

namespace CustomTypes
{
    [Serializable]
    public enum Severity
    {
        INFO,
        WARNING,
        EXCEPTION,
        CRITICAL,
        NONE
    }
}

引用库

  • 在所有将要使用此类型的项目中编译并引用新创建的库。
  • 现在打开项目的Properties => Settings。
    新库可能在type下拉列表中不可见。如果看不到 选择DropDown底部的“浏览”,然后尝试查找该库。
    如果仍然不可见,请在Selected Type字段中键入新类型的完整路径。 (在此示例中,输入“ CustomTypes.Severity”,如下所示:

    enter image description here

    从现在开始,新类型应该在 Properties.Settings.settings。中可见并可用。

    enter image description here

答案 2 :(得分:0)

以下是我将设置类型设置为MyEnum枚举类型的方法:

  1. 创建string类型的新属性设置(类型string将在后续步骤中更改为MyEnum类型)

  2. 打开Settings.Designer.cs

  3. enter image description here

    1. 将新属性的返回类型从string修改为枚举类型MyEnum

      鉴于设置枚举类型名为MyEnum(在Company.Enums中) 命名空间),将返回类型编辑为global::Company.Enums.MyEnum类型:

          [global::System.Configuration.ApplicationScopedSettingAttribute()]
          [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
          [global::System.Configuration.DefaultSettingValueAttribute("MySetting")]
          public global::Company.Enums.MyEnum MyEnum{
              get {
                  return ((global::Company.Enums.MyEnum)(this["MyEnum"]));
              }
          }
      
    2. 这样看起来更干净,只有一个陈述;在客户端确保类型安全,而不需要执行不必要的字符串来枚举解析。

      MyEnum value = Properties.Settings.Default["MySetting"];