【问题标题】:Why call .ToString() on ConfigurationManager.AppSettings[key]?为什么要在 ConfigurationManager.AppSettings[key] 上调用 .ToString()?
【发布时间】:2018-07-08 07:37:41
【问题描述】:

我不确定这是否会归结为意见问题,但我一直在代码中看到我不理解的模式。

在所有 C# 应用程序中,我一直看到这样的表达:

System.Configuration.ConfigurationManager.AppSettings["key"].ToString()

很长一段时间以来,我认为这只是我工作的一个怪癖,但我搜索了一下,它似乎不仅仅是一些一次性的东西。人们这样做了很多,但据我所知,它并没有真正被谈论过。

例如,这个blog 确保在AppSettings 上调用.ToString()this blog 也是如此

此外,all the programmers on this question 确保在 AppSettings 集合上调用 .ToString()

为了确保我不会发疯,我在 Visual Studio 中翻转了该方法,这向我保证,是的,AppSettings[key] 被强输入为字符串,并且在调用 @ 时“没有执行实际转换” 987654328@.

在我看来,AppSettings[key]AppSettings[key].ToString() 之间唯一真正的区别是抛出 NullReferenceException 的可能性。

所以我的问题是:

这样做是否有任何技术原因,还是出于某种原因,它是被广泛推荐的 C# 最佳实践,还是只是一个没有实际意义的怪癖?

【问题讨论】:

  • 你会在糟糕的代码中看到很多这种模式。一般来说,如果我在除 StringBuilder 之外的任何地方看到 .ToString(),我就会怀疑。这是一种代码气味。我已经更新了您链接到的那些答案,以便它们不再调用 .ToString()。如果您在其他任何地方看到它,请随时留下答案,呼吁他们!
  • 鉴于AppSettings["key"]返回一个字符串,下面的ToString()充其量根本没有用,最坏的情况是AppSettings["key"]返回null会导致异常
  • @mason 会的,谢谢!
  • @EleanorHolley 我最初说的是“留下一个答案把他们叫出来”。应该说“评论”而不是“答案”。只有当您直接解决所提出的问题时,您才应该留下答案。只是想确保我没有把你引向错误的方向。我发誓,这一切都在我的脑海里!

标签: c# asp.net .net tostring appsettings


【解决方案1】:

这样做是否有任何技术原因,还是出于某种原因,这是一种被广泛推荐的 C# 最佳实践,还是只是一个没有实际意义的怪癖?

后者。打电话给ToString是没有用的。它只会造成伤害。

ConfigurationManager.AppSettingsNameValueCollection 类型,访问者returns a string already 来自该类型。调用ToString 只能导致NullReferenceException。它没有积极的影响。

【讨论】:

    【解决方案2】:

    我建议这样的代码可能存在的一个重要原因是它可能最初是在ConfigurationManager 引入 .NET 2 之前编写的1

    以前,可以使用返回AppSettingsSectionAppSettings 属性访问Configuration 类。是的,不幸的是,有一个索引器返回 object 而不是 string

    在将他们的代码升级到 .NET 2 时,他们会看到使用 ConfigurationManager 的建议,并且会执行最少的编辑以使他们的代码改为使用此类。并且没有考虑/考虑删除现在多余的尾随 ToString()


    1在cmets中讨论过,很可能是很久以前写的,很久以前就升级了。但这种代码会被大量复制和粘贴,因此几乎可以病毒式地延续下去。

    【讨论】:

    • 或者,他们在 Stack Overflow 或一个随机人的博客上看到了一些使用 .ToString() 的代码,然后不假思索地复制粘贴。
    • @mason - 是的,这就是允许此类代码继续“编写”的原因。它已经流行起来了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多