我正在尝试将一些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
}

10-08 01:17