如果 web/app.config 中不存在“ Blab”,ConfigurationManager.AppSettings [“ Blab”]会抛出异常吗?
是 http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx
编辑: 这显然是错误的。请在下面留下有用的评论。
不,它返回 null。
null
来自 NameValueCollection.Item 属性(String)的 MSDN 文档:
注意 此属性在以下情况下返回 null: 1)如果未找到指定的键; 2)如果找到指定的键并且其关联值为 null。此属性不区分这两种情况。
注意
此属性在以下情况下返回 null: 1)如果未找到指定的键; 2)如果找到指定的键并且其关联值为 null。此属性不区分这两种情况。
ConfigurationManager.AppSettings是 NameValueCollection-来自 MSDN 文档:
ConfigurationManager.AppSettings
NameValueCollection
Get 方法不区分 返回 < strong > null,因为 找不到指定的键 和 返回 null,因为 与键关联的值为空。
(我的强调)
AppSettings 是 NameValueCollection-根据 获取页面上的 小心:
此方法返回空引用 (在 VisualBasic 中为 Nothing) 下列情况: 未找到密钥; 以及2)如果 找到指定的密钥,并将其 关联值为空引用 (在 VisualBasic 中为 Nothing)。此方法 并不区分这两者 案件。
其他答案引用 Item 属性的文档。通过查看下面的代码片段可能无法立即看出它们为什么相关。
ConfigurationManager.AppSettings["blah"]
C # 中使用方括号语法来访问索引器。这些特殊属性允许类以与数组相同的方式进行索引。查看 项目属性的定义,您将注意到它没有使用正常的属性语法。This 关键字和 indexer 参数用于将此属性定义为索引器。
public string this[ string name ] { get; set; }
在文档中,索引器被隐式命名为 Item,参数被方括号包围。
我不清楚为什么会有引用 走开方法的答案-也许一个调用另一个?
无论如何,回答这个问题..。
否。如果您访问一个不存在的键,将不会引发异常-将返回一个空值。
下面是 项目属性文档中的相关部分。
此属性在下列情况下返回 null: 1)如果指定的 找不到; 2)如果找到指定的密钥并且其 关联值为空。此属性不区分 两个案子。
正如 Tim 所说,它只会返回 null。
但是,如果希望在找不到异常时抛出异常,可以这样做:
var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");