如何在静态类中正确处理appSettings的布尔值配置异常?
配置驱动的日志开关静态属性实现
我正在开发一个用于判断是否记录日志的静态类,最初的实现很简单:
public static bool ShouldLog { get; set; } = true;
之后我想改用应用配置来控制这个值,于是改成:
public static bool ShouldLog { get; set; } = ConfigurationManager.AppSettings["ShouldLog"];
但这段代码无法运行,因为ConfigurationManager.AppSettings[]返回的是字符串类型,必须先解析。
于是我调整为:
public static bool ShouldLog { get; set; } = Boolean.Parse(ConfigurationManager.AppSettings["ShouldLog"]);
但新问题来了:如果application.config里没配置这个条目,会抛出NullReferenceException异常。我又改成了下面的写法:
public static bool ShouldLog { get; set; } = ConfigurationManager.AppSettings["ShouldLog"] == null ? false : Boolean.Parse(ConfigurationManager.AppSettings["ShouldLog"]);
可一旦配置项填了无效内容,又会抛出TypeInitializationException异常。我接着尝试:
public static bool ShouldLog { get; set; } = ConfigurationManager.AppSettings["ShouldLog"] == null ? false : Boolean.TryParse(ConfigurationManager.AppSettings["ShouldLog"]);
这段代码还是跑不起来,因为Boolean.TryParse的签名不是result = TryParse(),而是TryParse(..., out result),到这里我卡壳了。
我希望能写出这样的代码:
bool ShouldLog = ...(ConfigurationManager.AppSettings["ShouldLog"]);
期望结果
- 当application.config中的条目为
TRUE或FALSE时(最好支持大小写不敏感),返回对应的true或false。 - 当application.config中的条目为其他内容时,返回
false。 - 当application.config中不存在该条目时,返回
false。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

