为什么在ConfigurationManager.AppSettings [key]上调用.ToString()?

时间:2018-01-29 14:58:14

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

我不确定这是否会归结为意见问题,但我不断看到代码中我不明白的模式。

遍布C#应用程序,我一直看到表达式:

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

很长一段时间以来,我认为这只是我工作的一个怪癖,但我搜索过它,看起来它不仅仅是一些一次性的事情。人们做了相当多的事情,但据我所知,它并没有真正被人们所津津乐道。

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

也是如此

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

为了确保我不会发疯,我在Visual Studio中翻阅了该方法,这向我保证,是的,AppSettings[key]强类型为字符串,并且"没有实际进行转换"在致电.ToString()时。

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

所以我的问题是:

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

2 个答案:

答案 0 :(得分:6)

  

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

后者。调用ToString没有用。它只能造成伤害。

ConfigurationManager.AppSettings属于NameValueCollection类型,访问者returns a string already。致电ToString只会导致NullReferenceException。它没有积极的影响。

答案 1 :(得分:5)

我建议有一个很好的理由说明为什么这样的代码可能存在,它可能是在.NET 2中引入ConfigurationManager之前最初编写的 1

以前,可以使用返回AppSettingsSectionConfiguration属性访问AppSettings类。遗憾的是,有一个索引器返回object而不是string

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

1 正如评论中所讨论的那样,它很可能是很久以前写的并且很久以前就升级了。但这就是那种将被复制的代码。粘贴很多,因此几乎病毒式地延续了自己。