首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ConfigurationManager &静态类

ConfigurationManager &静态类
EN

Stack Overflow用户
提问于 2011-08-25 11:22:19
回答 3查看 11.1K关注 0票数 5

我想使用ConfigurationManager访问静态类中的一些字符串值。但是,我需要具体处理没有值或空值的情况。现在我正在使用类型初始化器,比如

代码语言:javascript
复制
private static readonly string someStr = ConfigurationManager.AppSettings["abc"];

去做这份工作。但是,如果App.config中不存在一个键为"abc“的字符串,那么执行过程将顺利地继续,使用null引用代替someStr。那么,在初始化时验证此值的最佳方法是什么?一个静态构造函数,我在其中初始化值,然后检查有效性?我听说静态构造函数将被避免,并在可能的情况下被类型初始化器所取代。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 11:28:14

我用的是这样的东西

代码语言:javascript
复制
public static readonly string someStr  = 
        ConfigurationManager.AppSettings["abc"] ?? "default value";

或处理空字符串:

代码语言:javascript
复制
public static readonly string someStr = 
           !String.IsNullOrEmpty(ConfigurationManager.AppSettings["abc"]) ? 
                             ConfigurationManager.AppSettings["abc"] : "default value";
票数 7
EN

Stack Overflow用户

发布于 2015-12-02 21:32:20

这是在一次代码评审中提到的。提供的答案对于字符串来说是很棒的。但他们不工作一个整数或双份,等等.今天,我需要做这个重试计数,它需要一个int。

因此,对于那些希望包含类型转换的人,这里有一个答案。

使用此扩展方法:

代码语言:javascript
复制
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

希望这对下一个人有帮助。

票数 5
EN

Stack Overflow用户

发布于 2011-08-25 11:32:58

静态构造函数很好,最重要的是运行时保证它们只执行一次和一次--在任何情况下第一次使用该类。

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

代码语言:javascript
复制
private static readonly string someStr = ConfigurationManager.AppSettings["abc"] ?? "some default value";
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7189509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档