2010-09-21 64 views
3

ASP.NETAppSettings后备/默认值?

对于我使用的每个appSetting,我想指定一个值,如果在appSettings中找不到指定的键,将返回一个值。我正要创建一个类来管理这个,但我认为这个功能可能已经在.NET Framework中的某处?

.NET中是否存在NameValueCollection/Hash/etc-type类,它允许我指定一个键和一个后备/默认值 - 并返回键的值或指定的值?

如果有,我可以将appSettings放入该类型的对象中,然后再调用它(来自不同的地方)。

回答

2

我不相信.NET中内置了任何东西,它提供了您正在寻找的功能。

您可以创建基于Dictionary<TKey, TValue>

public class MyAppSettings<TKey, TValue> : Dictionary<TKey, TValue> 
{ 
    public void TryGetValue(TKey key, out TValue value, TValue defaultValue) 
    { 
     if (!this.TryGetValue(key, out value)) 
     { 
      value = defaultValue; 
     } 
    } 
} 

一类,它提供的TryGetValue过载与默认值的附加参数,例如:你也许可以用string s,而不是在一般保持脱身。

如果这些选项是Silverlight和WPF世界,还有DependencyObject

当然,最简单的方法是这样的一个NameValueCollection:在字符串索引

string value = string.IsNullOrEmpty(appSettings[key]) 
    ? defaultValue 
    : appSettings[key]; 

key可以null。但我知道在多个地方这样做是一件痛苦的事情。

+1

我提供了一个扩展方法来执行此操作,其中包括TypeConverstion:http://stackoverflow.com/a/34053423/375727。 显然不是为OP,因为这篇文章是5岁,但像我这样的未来谷歌没有在这里找到答案。 – Rhyous 2015-12-02 21:55:49

0

我认为C:\%WIN%\ Microsoft.NET下的machine.config会这样做。将该文件的密钥添加为默认值。

http://msdn.microsoft.com/en-us/library/ms228154.aspx

+0

的Machine.config会给我回退值,但我不能够在代码中指定了吗?是对的吗?我正在寻找一些东西,可以让我在代码中指定如果appSettings没有指定密钥时应返回的值。我提到了appSettings,但是这个问题与任何NameValueCollection/Hash相同,因为它是关于appSettings(或* .config)的。 – lance 2010-09-21 18:08:24

1

您可以自定义配置节,并提供使用默认值属性的默认值。说明可用here

+0

另一个很好的答案,表明我问我的问题有多糟糕。我可能需要根据调用者(和/或仅在运行时确定的值)指定不同的回退/默认值。我不应该提到appSettings,因为我真的需要,简单地说,是一个NameValueCollection类型的对象,它允许我指定要返回的值,如果找不到密钥。 – lance 2010-09-21 18:21:14

2

这就是我所做的。

WebConfigurationManager.AppSettings["MyValue"] ?? "SomeDefault") 

对于布尔和其他非字符串类型...

bool.Parse(WebConfigurationManager.AppSettings["MyBoolean"] ?? "false")