【发布时间】:2011-11-04 02:19:33
【问题描述】:
可以使用 C# 的 Properties.Settings.Default["MySetting"] 语法将 enum 值保存为设置吗?我试图在我的项目的属性页中创建一个设置,但只有系统类出现在可用类型列表中。
如果可以,我该怎么做?提前感谢您的帮助。
【问题讨论】:
可以使用 C# 的 Properties.Settings.Default["MySetting"] 语法将 enum 值保存为设置吗?我试图在我的项目的属性页中创建一个设置,但只有系统类出现在可用类型列表中。
如果可以,我该怎么做?提前感谢您的帮助。
【问题讨论】:
只需将其存储为 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 );
【讨论】:
string,然后使用Enum.TryParse。这种方式更易于人类阅读。
这是一篇旧帖子,但我认为这个解决方案值得为可能遇到相同问题的人发布。
基本上,它包括创建一个供主项目引用的新库,以便该库将枚举公开为可以从 Properties.Settings.settings 中选择的新类型。
就我而言,我想列举严重程度。
新图书馆
在您当前的解决方案下,使用以下代码创建一个新的空类库:
namespace CustomTypes
{
[Serializable]
public enum Severity
{
INFO,
WARNING,
EXCEPTION,
CRITICAL,
NONE
}
}
参考图书馆
【讨论】:
这是我将设置类型设置为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"];
【讨论】: