如果 "blah" 不存在,ConfigurationManager.AppSettings["blah"] 会抛出异常吗?
Posted
技术标签:
【中文标题】如果 "blah" 不存在,ConfigurationManager.AppSettings["blah"] 会抛出异常吗?【英文标题】:Will ConfigurationManager.AppSettings["blah"] throw an exception if "blah" doesn't exist? 【发布时间】:2011-03-12 08:41:51 【问题描述】:如果 web/app.config 中不存在 "blah",ConfigurationManager.AppSettings["blah"] 会抛出异常吗?
【问题讨论】:
【参考方案1】:不,它返回null
。
【讨论】:
【参考方案2】:来自MSDN documentation for NameValueCollection.Item Property (String):
注意
该属性在以下情况下返回null: 1)如果指定的键没有找到; 2) 如果找到指定的键并且其关联值为空。该属性不区分这两种情况。
【讨论】:
【参考方案3】:不,它返回null
。
AppSettings 是一个NameValueCollection - 根据NameValueCollection.Get 页面上的caution:
这个方法返回一个空引用 (在 Visual Basic 中没有)在 以下情况:1)如果指定 未找到密钥; 2)如果 找到指定的键并且其 关联值是空引用 (在 Visual Basic 中没有)。这种方法 不区分两者 案例。
【讨论】:
【参考方案4】:不,它返回null
。
ConfigurationManager.AppSettings
是NameValueCollection
- 来自the MSDN documentation:
Get方法不区分 在 null 之间返回,因为 找不到指定的密钥并且 返回的 null 是因为 与键关联的值为空。
(我的重点)
【讨论】:
【参考方案5】:其他答案参考 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) 如果找到指定的密钥并且它的 关联值为空。此属性不区分 两种情况。
【讨论】:
【参考方案6】:正如 Tim 所说,它只会返回 null。
但是,如果您希望它在找不到时抛出异常,可以这样做:
var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");
【讨论】:
【参考方案7】:是的http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx
编辑:这显然是错误的。留给下面有帮助的 cmets。
【讨论】:
您的问题的答案是不,就像@Tim 提到的那样。指向的页面刚刚说如果无法加载应用程序设置,则会引发异常。但是,如果 appsettings 中不存在某个值,那么您将不会遇到异常。仅仅因为字典中不存在值就抛出错误真的没有意义。但是,如果字典不存在,那么这将是引发错误的原因。 (字典一词只是用来指代任意集合。) 该链接表示如果找不到NameValueCollection
则会引发异常 - 即系统找不到 任何 设置。当您尝试检索不存在的单个值时,名称值集合不会引发异常..以上是关于如果 "blah" 不存在,ConfigurationManager.AppSettings["blah"] 会抛出异常吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Format("blah 0", someValue) 签名(如 string.format)实现 MyMethod()