可以使用C#的enum
语法将Properties.Settings.Default["MySetting"]
值保存为设置吗?我尝试在项目的属性页面中创建一个设置,但只有系统类出现在可用类型列表中。
如果可以,我该怎么办?在此先感谢您的帮助。
答案 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
}
}
引用库
答案 2 :(得分:0)
以下是我将设置类型设置为MyEnum
枚举类型的方法:
创建string
类型的新属性设置(类型string
将在后续步骤中更改为MyEnum
类型)
打开Settings.Designer.cs
:
将新属性的返回类型从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"]));
}
}
这样看起来更干净,只有一个陈述;在客户端确保类型安全,而不需要执行不必要的字符串来枚举解析。
MyEnum value = Properties.Settings.Default["MySetting"];