在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 );
namespace CustomTypes
{
[Serializable]
public enum Severity
{
INFO,
WARNING,
EXCEPTION,
CRITICAL,
NONE
}
}
引用库
以下是我如何将Setting类型设置为枚举类型MyEnum
的方法:
创建新的属性设置,类型为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"];
Enum.TryParse
。这样更易读懂。 - Ben Voigt