【发布时间】:2011-03-12 08:41:51
【问题描述】:
如果 web/app.config 中不存在 "blah",ConfigurationManager.AppSettings["blah"] 会抛出异常吗?
【问题讨论】:
标签: .net configuration
如果 web/app.config 中不存在 "blah",ConfigurationManager.AppSettings["blah"] 会抛出异常吗?
【问题讨论】:
标签: .net configuration
不,它返回null。
【讨论】:
来自MSDN documentation for NameValueCollection.Item Property (String):
注意
该属性在以下情况下返回null: 1)如果指定的键没有找到; 2) 如果找到指定的键并且其关联值为空。该属性不区分这两种情况。
【讨论】:
不,它返回null。
AppSettings 是一个NameValueCollection - 根据NameValueCollection.Get 页面上的caution:
这个方法返回一个空引用 (在 Visual Basic 中没有)在 以下情况:1)如果指定 未找到密钥; 2)如果 找到指定的键并且其 关联值是空引用 (在 Visual Basic 中没有)。这种方法 不区分两者 案例。
【讨论】:
不,它返回null。
ConfigurationManager.AppSettings 是NameValueCollection - 来自the MSDN documentation:
Get方法不区分 在 null 之间返回,因为 找不到指定的密钥并且 返回的 null 是因为 与键关联的值为空。
(我的重点)
【讨论】:
其他答案参考 Item 属性的文档。查看以下代码 sn-p,可能不会立即明白为什么它们是相关的。
ConfigurationManager.AppSettings["blah"]
方括号语法在 C# 中用于访问索引器。这些是允许类以与数组相同的方式被索引的特殊属性。查看NameValueCollection.Item 属性的定义,您会注意到它没有使用正常的属性语法。 this 关键字和 indexer 参数用于将此属性定义为索引器。
public string this[
string name
] { get; set; }
在文档中,索引器被隐式命名为 Item,参数用方括号括起来。
我不清楚为什么会有引用 Get 方法的答案 - 也许一个调用另一个?
无论如何,要回答这个问题......
没有。如果您访问不存在的键,则不会引发异常 - 将返回 null。
这是NameValueCollection.Item 属性文档中的相关部分。
此属性在以下情况下返回 null:1) 如果指定 未找到密钥; 2) 如果找到指定的密钥并且它的 关联值为空。此属性不区分 两种情况。
【讨论】:
正如 Tim 所说,它只会返回 null。
但是,如果您希望它在找不到时抛出异常,可以这样做:
var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");
【讨论】:
是的http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx
编辑:这显然是错误的。留给下面有帮助的 cmets。
【讨论】:
NameValueCollection 则会引发异常 - 即系统找不到 任何 设置。当您尝试检索不存在的单个值时,名称值集合不会引发异常..