如果web / app.config中不存在“blah”,ConfigurationManager.AppSettings [“blah”]会抛出异常吗?
真诚地为超级懒惰的问题道歉。
答案 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.AppSettings
是NameValueCollection
- 来自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,参数用方括号括起来。
我不清楚为什么会有引用Get方法的答案 - 也许有人会调用另一个?
无论如何,要回答这个问题......
否。如果您访问不存在的密钥,则不会抛出异常 - 将返回null。
以下是NameValueCollection.Item属性文档中的相关部分。
在以下情况下,此属性返回null:1)如果指定 找不到钥匙; 2)如果找到指定的密钥及其 关联值为null。此属性不区分 这两个案例。
答案 5 :(得分:0)
如蒂姆所说,它只会返回null。
但是,如果您希望它在找不到时抛出异常,可以这样做:
var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");
答案 6 :(得分:-2)