如果不存在“呐呐”,ConfigurationManager.AppSettings [“呐呐”]会抛出异常吗?

如果 web/app.config 中不存在“ Blab”,ConfigurationManager.AppSettings [“ Blab”]会抛出异常吗?

25248 次浏览

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.appsettings.aspx

编辑: 这显然是错误的。请在下面留下有用的评论。

不,它返回 null

来自 NameValueCollection.Item 属性(String)的 MSDN 文档:

注意

此属性在以下情况下返回 null: 1)如果未找到指定的键; 2)如果找到指定的键并且其关联值为 null。此属性不区分这两种情况。

不,它返回 null

ConfigurationManager.AppSettingsNameValueCollection-来自 MSDN 文档:

Get 方法不区分 返回 < strong > null,因为 找不到指定的键 和 返回 null,因为 与键关联的值为空。

(我的强调)

不,它返回 null

AppSettings 是 NameValueCollection-根据 获取页面上的 小心:

此方法返回空引用 (在 VisualBasic 中为 Nothing) 下列情况: 未找到密钥; 以及2)如果 找到指定的密钥,并将其 关联值为空引用 (在 VisualBasic 中为 Nothing)。此方法 并不区分这两者 案件。

其他答案引用 Item 属性的文档。通过查看下面的代码片段可能无法立即看出它们为什么相关。

ConfigurationManager.AppSettings["blah"]

C # 中使用方括号语法来访问索引器。这些特殊属性允许类以与数组相同的方式进行索引。查看 项目属性的定义,您将注意到它没有使用正常的属性语法。This 关键字和 indexer 参数用于将此属性定义为索引器。

public string this[
string name
] { get; set; }

在文档中,索引器被隐式命名为 Item,参数被方括号包围。

Indexers as shown in the MSDN documentation.

我不清楚为什么会有引用 走开方法的答案-也许一个调用另一个?

无论如何,回答这个问题..。

否。如果您访问一个不存在的键,将不会引发异常-将返回一个空值。

下面是 项目属性文档中的相关部分。

此属性在下列情况下返回 null: 1)如果指定的 找不到; 2)如果找到指定的密钥并且其 关联值为空。此属性不区分 两个案子。

正如 Tim 所说,它只会返回 null。

但是,如果希望在找不到异常时抛出异常,可以这样做:

var myImportantSetting= ConfigurationManager.AppSettings["important_setting"] ?? throw new SettingsPropertyNotFoundException("AppSetting missing.");