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

C# C:枚举值是否可以保存为设置?,c#,enums,settings,C#,Enums,Settings,是否可以使用C的Properties.Settings.Default[MySetting]语法将枚举值另存为设置?我试图在项目的属性页中创建一个设置,但只有系统类出现在可用类型列表中 如果能做到,我该怎么做?提前感谢您的帮助。只需将其存储为int并在需要时转换即可 Properties.Settings.Default["MySetting"] = myEnumValue; // and later var settingValue = Properties.Settings.Defaul

是否可以使用C的Properties.Settings.Default[MySetting]语法将枚举值另存为设置?我试图在项目的属性页中创建一个设置,但只有系统类出现在可用类型列表中


如果能做到,我该怎么做?提前感谢您的帮助。

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

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

// and later 
var settingValue = Properties.Settings.Default["MySetting"];
MyEnum value = (MyEnum)settingValue;
如果您觉得有必要,可以使用Enum.isDefinedTypeOfMyNum、value来确保它有效。您还可以在配置文件中存储字符串值,使其具有可读格式:

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

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

以下是如何将设置类型设置为MyEnum枚举类型:

创建字符串类型的新属性设置。在接下来的步骤中,字符串类型将更改为MyEnum类型

打开Settings.Designer.cs

:

将新属性的返回类型从字符串修改为枚举类型MyEnum:

给定设置,枚举类型命名为MyEnumin Company.Enums 命名空间中,将返回类型编辑为global::Company.Enums.MyEnum类型:

这样看起来更干净,只有一句话;类型安全在客户端得到了保证,而无需对枚举进行不必要的字符串解析

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

这是一篇老文章,但我认为这个解决方案值得发表,因为可能会遇到同样的问题。基本上,它包括创建一个主项目引用的新库,以便该库将枚举公开为一个新类型,可以从Properties.Settings.Settings中选择。 在我的例子中,我想列举严重程度

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

namespace CustomTypes
{
    [Serializable]
    public enum Severity
    {
        INFO,
        WARNING,
        EXCEPTION,
        CRITICAL,
        NONE
    }
}
参考图书馆

在将要使用此类型的所有项目中编译并引用新创建的库。 现在打开项目的Properties=>Settings。 新库可能在类型下拉列表中尚不可见。如果你看不到, 选择下拉列表底部的“浏览”,然后尝试查找库。 如果仍不可见,请在“选定类型”字段中键入新类型的完整路径。在本例中,输入CustomTypes.Severity,如下所示: 从现在起,新类型应该在Properties.Settings.Settings中可见并可用。
或存储字符串,然后使用Enum.TryParse。这样更容易让人理解。有一个更好的答案。总之,在“类型”列中,选择“浏览…”,然后在底部的“选定类型”文本框中键入枚举的全名。这种方法的问题是,如果您对.settings进行任何更改,VS将阻止您所做的更改。您不应更改*.Designer.cs文件。您可以创建另一个文件,扩展设计器中定义的分部类,其中包含转换属性。
namespace CustomTypes
{
    [Serializable]
    public enum Severity
    {
        INFO,
        WARNING,
        EXCEPTION,
        CRITICAL,
        NONE
    }
}