【问题标题】:Will ConfigurationManager.AppSettings["blah"] throw an exception if "blah" doesn't exist?如果 "blah" 不存在,ConfigurationManager.AppSettings["blah"] 会抛出异常吗?
【发布时间】:2011-03-12 08:41:51
【问题描述】:

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

【问题讨论】:

    标签: .net configuration


    【解决方案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 则会引发异常 - 即系统找不到 任何 设置。当您尝试检索不存在的单个值时,名称值集合不会引发异常..
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2013-08-09
                • 2011-11-02
                • 2017-12-22
                相关资源
                最近更新 更多