我想使用ConfigurationManager访问静态类中的一些字符串值。但是,我需要具体处理没有值或空值的情况。现在我正在使用类型初始化器,比如
private static readonly string someStr = ConfigurationManager.AppSettings["abc"];去做这份工作。但是,如果App.config中不存在一个键为"abc“的字符串,那么执行过程将顺利地继续,使用null引用代替someStr。那么,在初始化时验证此值的最佳方法是什么?一个静态构造函数,我在其中初始化值,然后检查有效性?我听说静态构造函数将被避免,并在可能的情况下被类型初始化器所取代。
发布于 2011-08-25 11:28:14
我用的是这样的东西
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";发布于 2015-12-02 21:32:20
这是在一次代码评审中提到的。提供的答案对于字符串来说是很棒的。但他们不工作一个整数或双份,等等.今天,我需要做这个重试计数,它需要一个int。
因此,对于那些希望包含类型转换的人,这里有一个答案。
使用此扩展方法:
using System.Collections.Specialized;
using System.ComponentModel;
namespace Rhyous.Config.Extensions
{
public static class NameValueCollectionExtensions
{
public static T Get<T>(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));
}
}
}我也有它的单元测试,您可以在这里找到:http://www.rhyous.com/2015/12/02/how-to-easily-access-a-web-config-appsettings-value-with-a-type-and-a-default-value
希望这对下一个人有帮助。
发布于 2011-08-25 11:32:58
静态构造函数很好,最重要的是运行时保证它们只执行一次和一次--在任何情况下第一次使用该类。
您也可以使用合并运算符(??)来设置默认值:
private static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "some default value";https://stackoverflow.com/questions/7189509
复制相似问题