我正在尝试将一些AppSettings加载到一个对象中。设置如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Logging_default_path" value="C:\Temp" />
<add key="Logging_max_file_size" value="10485760" />
<add key="Logging_levels" value="Error,Warning,Info"/>
<add key="Logging_filename" value="RobinsonLog" />
</appSettings>
</configuration>
Logging_levels 表示设置允许的几个枚举值。我正在尝试通过使用以下代码将它们加载到我的对象中:
Level = (LogLevel)Enum.Parse(typeof(LogLevel), settings["Logging_levels"]);
但这不起作用,我只返回LogLevel.Info,而不返回Loglevel.Error的值。 LogLevel.Warning | LogLevel.Info。枚举定义如下:
[Flags]
public enum LogLevel
{
Error = 0x0,
Warning = 0x1,
Info = 0x2,
Debug = 0x3,
Performance = 0x4
}
通过用十六进制定义值是否错误?还是我想念其他东西?
最佳答案
您的enum
值将引起问题。Flags
enum
的值必须是2的幂,并且除了某种空/无/无指示符之外,您不应将0用作其他任何值。
这有什么区别吗?
[Flags]
public enum LogLevel
{
None = 0
Error = 1,
Warning = 2,
Info = 4,
Debug = 8,
Performance = 16
}