如果“blah”不存在,ConfigurationManager.AppSettings [“blah”]会抛出异常吗?

时间:2010-07-06 14:42:20

标签: .net configuration

如果web / app.config中不存在“blah”,ConfigurationManager.AppSettings [“blah”]会抛出异常吗?

真诚地为超级懒惰的问题道歉。

7 个答案:

答案 0 :(得分:120)

不,它会返回null

答案 1 :(得分:24)

来自MSDN documentation for NameValueCollection.Item Property (String)

  

<强>注意

     

在以下情况下,此属性返回null:1)如果未找到指定的键; 2)如果找到指定的键并且其关联值为null。此属性不区分这两种情况。

答案 2 :(得分:7)

不,它会返回null

AppSettings为NameValueCollection - 根据caution页面上的NameValueCollection.Get

  

此方法返回空引用   (在Visual Basic中没有任何内容)   以下情况:1)如果指定   找不到钥匙; 2)如果   找到指定的密钥及其   关联值是空引用   (在Visual Basic中没有任何内容)。这种方法   不区分这两者   例。

答案 3 :(得分:6)

不,它会返回null

ConfigurationManager.AppSettingsNameValueCollection - 来自the MSDN documentation

  

Get方法无法区分   之间返回的 null之间   找不到指定的密钥和   返回null,因为   与键关联的值为null。

(我的重点)

答案 4 :(得分:2)

其他答案引用Item属性的文档。可能不会立即明白为什么它们与下面的代码片段有关。

ConfigurationManager.AppSettings["blah"]

方括号语法在C#中用于访问索引器。这些是特殊属性,允许以与数组相同的方式对类进行索引。查看NameValueCollection.Item属性的定义,您会注意到它不使用普通属性语法。 this关键字和索引器参数用于将此属性定义为索引器。

public string this[
    string name
] { get; set; }

在文档中,索引器隐式命名为Item,参数用方括号括起来。

Indexers as shown in the MSDN documentation.

我不清楚为什么会有引用Get方法的答案 - 也许有人会调用另一个?

无论如何,要回答这个问题......

否。如果您访问不存在的密钥,则不会抛出异常 - 将返回null。

以下是NameValueCollection.Item属性文档中的相关部分。

  

在以下情况下,此属性返回null:1)如果指定   找不到钥匙; 2)如果找到指定的密钥及其   关联值为null。此属性不区分   这两个案例。

答案 5 :(得分:0)

如蒂姆所说,它只会返回null。

但是,如果您希望它在找不到时抛出异常,可以这样做:

var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");

答案 6 :(得分:-2)

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

编辑:这显然是错误的。留下以下有用的评论。