[英]C#: Can an Enum Value be saved as a Setting?
可以使用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 );
这是一个老帖子,但我认为这个解决方案值得发布,可能会遇到同样的问题。
基本上它包括创建一个由主项目引用的新库,以便该库将枚举公开为可以从Properties.Settings.settings中选择的新类型。 在我的情况下,我想列举严重程度。
新图书馆
在您当前的解决方案下,使用以下代码创建一个新的空类库:
namespace CustomTypes
{
[Serializable]
public enum Severity
{
INFO,
WARNING,
EXCEPTION,
CRITICAL,
NONE
}
}
参考图书馆
以下是我将Setting类型设置为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"];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.