ConfigurationManager和静态类

我想使用ConfigurationManager静态类访问一些字符串值。 但是,我需要特别处理缺少值或空值的存在。 现在我正在使用类型初始化器,比如

 private static readonly string someStr = ConfigurationManager.AppSettings["abc"]; 

做这个工作。 但是,如果App.config中不存在具有键“abc”的字符串,则执行将继续使用null引用代替someStr 。 那么,什么是在初始化时validation此值的最佳方法? 一个静态构造函数,我在其中初始化值然后检查有效性? 我听说要避免使用静态构造函数,并在可能的情况下用类型初始化程序替换。

我正在使用这样的东西:

 public static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "default value"; 

或者处理空字符串:

 public static readonly string someStr = !String.IsNullOrEmpty(ConfigurationManager.AppSettings["abc"]) ? ConfigurationManager.AppSettings["abc"] : "default value"; 

这只是在代码审查中提出的。 提供的答案非常适合字符串。 但它们不适用于int或double等…今天,我需要为重试计数执行此操作,并且它需要是一个int。

所以这里是那些想要包含类型转换的人的答案。

使用此扩展方法:

 using System.Collections.Specialized; using System.ComponentModel; namespace Rhyous.Config.Extensions { public static class NameValueCollectionExtensions { public static T Get(this NameValueCollection collection, string key, T defaultValue) { var value = collection[key]; var converter = TypeDescriptor.GetConverter(typeof(T)); if (string.IsNullOrWhiteSpace(value) || !converter.IsValid(value)) { return defaultValue; } return (T)(converter.ConvertFromInvariantString(value)); } } } 

我也有它的unit testing,你可以在这里找到: http : //www.rhyous.com/2015/12/02/how-to-easily-access-a-web-config-appsettings-value-with-一型和一个默认值

希望有助于下一个人。

静态构造函数很好,关于它们的好处是它们可以被运行时保证只执行一次 – 这是第一次在任何情况下使用类。

您也可以使用coalesce运算符( ?? )来设置默认值:

 private static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "some default value";