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";