如果 "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.AppSettingsNameValueCollection - 来自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()

Spark Regexp:根据日期拆分列

C语言,判断一个文件是不是存在

如何创建 Bash 别名?

Vue.js - 属性或方法“blah”未在实例上定义,但在渲染期间引用