我不确定这是否会归结为意见问题,但我一直在代码中看到我不理解的模式。
在所有 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# 最佳实践,还是只是一个没有实际意义的奇怪怪癖?
最佳答案
我认为这种代码可能存在的一个重要原因是它可能是在 .NET 2 中引入 ConfigurationManager
之前编写的。
以前,可以使用返回 Configuration
的 AppSettings
属性访问 AppSettingsSection
类。是的,不幸的是,有一个索引器返回 object
而不是 string
。
在将他们的代码升级到 .NET 2 时,他们会看到建议改用 ConfigurationManager
,并且将执行最少的编辑以使他们的代码改用此类。并没有考虑/考虑删除现在多余的尾随 ToString()
。
1正如评论中所讨论的,它可能是很早以前写的,很早就升级了。但这种代码会被大量复制和粘贴,因此几乎病毒式地延续下去。
关于c# - 为什么在 ConfigurationManager.AppSettings[key] 上调用 .ToString()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48504128/