如果不存在“ blah”,ConfigurationManager.AppSettings [“ blah”]是否会引发异常?


124

如果web / app.config中不存在“ blah”,ConfigurationManager.AppSettings [“ blah”]是否会引发异常?

对于超级懒惰的问题致以诚挚的歉意。


5
-1:既然您已经意识到这是一个懒惰的问题,那么真的不仅仅尝试比在这里发布此问题还少的工作吗?
拉瑟五世卡尔森

或查看该NameValueCollection.Item物业的文件...
蒂姆·罗宾逊2010年

2
谢谢那些回答。我会尽量不要养成这样的问题。
本·阿斯顿

49
Pfh。请继续提出这样的问题,因为我和世界其他地方的google configurationmanager appsettings不存在密钥,因为它比解析MSDN容易。IMO使生活变得更轻松的任何事情。因为F那些Dbags而被投票。
Cory Mawhorter 2014年

31
看看您这个懒惰的问题,这可以让其他人在4年内节省几分钟的时间并保持计数。:)
马特·贝克曼

Answers:




7

不,它返回null

AppSettings的是NameValueCollection中 -按照该谨慎的上NameValueCollection.Get页:

在以下情况下,此方法返回空引用(在Visual Basic中为Nothing):1)如果找不到指定的键;2)如果找到了指定的键,并且其关联的值为空引用(Visual Basic中为Nothing)。此方法无法区分这两种情况。


6

不,它返回 null

ConfigurationManager.AppSettingsNameValueCollection-来自MSDN文档

Get方法不能区分因为找不到指定的键而返回的null和由于与键关联的值是null而返回的null。

(我的重点)


3

其他答案参考Item属性的文档。看起来下面的代码片段为何有意义,可能并不立刻明白。

ConfigurationManager.AppSettings["blah"]

方括号语法在C#中用于访问索引器。这些特殊属性允许类以与数组相同的方式进行索引。查看NameValueCollection.Item属性的定义,您会发现它不使用常规属性语法。this关键字和indexer参数用于将此属性定义为indexer。

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

在文档中,索引器隐式命名为Item,参数用方括号括起来。

索引器如MSDN文档中所示。

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

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

否。如果您访问不存在的密钥,则不会引发异常-将返回null。

这是NameValueCollection.Item属性文档中的相关部分。

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


-2

http://msdn.microsoft.com/zh-cn/library/system.configuration.configurationmanager.appsettings.aspx

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


1
您的问题的答案是不喜欢提到的@Tim。指向的页面只是说,如果无法加载appsettings,则将引发异常。但是,如果值仅不存在于appsettings中,那么您将不会获得异常。仅仅因为字典中不存在值而引发错误确实没有任何意义。但是,如果字典不存在,那将是引发错误的原因。(术语词典仅用于指代任意集合。)
spinon 2010年

该链接表示,如果NameValueCollection找不到,则会引发异常-即系统找不到任何设置。当您尝试检索不存在..单个值的名称值的集合不抛出的异常
德克斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.