为什么在 ConfigurationManager.AppSettings[key] 上调用 .ToString()?
Why call .ToString() on ConfigurationManager.AppSettings[key]?
我不确定这是否会归结为意见问题,但我一直在代码中看到一个我不理解的模式。
在所有 C# 应用程序中,我不断看到表达式:
System.Configuration.ConfigurationManager.AppSettings["key"].ToString()
很长一段时间我都以为这只是我工作的地方的怪癖,但我搜索了一下,看来这不仅仅是一些一次性的事情。人们做了相当多的事情,但据我所知并没有真正谈论它。
这个blog, for example, makes sure to call .ToString()
on AppSettings, and so does this blog
此外,all the programmers on this question 确保对 AppSettings 集合调用 .ToString()
。
为了确保我不会发疯,我翻阅了 Visual Studio 中的方法,这向我保证,是的,AppSettings[key]
是强类型字符串,并且 "no actual conversion is performed" 调用 .ToString()
.
时
在我看来,AppSettings[key]
和 AppSettings[key].ToString()
之间唯一真正的区别是抛出 NullReferenceException 的可能性。
所以我的问题是:
这样做是否有任何技术原因,或者出于某种原因它是广泛推荐的 C# 最佳实践,还是它只是一个没有实际意义的怪癖?
Is there any technical reason for doing this, or is it a widely-recommended C# best practice for some reason, or is it just a weird quirk with no real meaning?
后者。调用 ToString
没有用。只会害人害己。
ConfigurationManager.AppSettings
是 NameValueCollection
类型,访问者 returns a string already 就是其中的类型。调用 ToString
只能导致 NullReferenceException
。它没有任何积极影响。
我认为这样的代码可能存在的一个强有力的理由是,它可能最初是在 ConfigurationManager
引入 .NET 2 之前编写的 1。
以前,访问 Configuration
class 时其 AppSettings
属性 会返回 AppSettingsSection
。是的,不幸的是,有一个 returns object
而不是 string
.
的索引器
在将他们的代码升级到 .NET 2 时,他们会看到使用 ConfigurationManager
的建议,并且将执行最少的编辑量以使他们的代码使用此 class .并没有想到 about/considered 删除现在多余的尾随 ToString()
。
1评论里说的,估计是很久以前写的,很久以前升级的。但这种代码会被大量复制和粘贴,因此几乎会像病毒式传播一样永久存在。
我不确定这是否会归结为意见问题,但我一直在代码中看到一个我不理解的模式。
在所有 C# 应用程序中,我不断看到表达式:
System.Configuration.ConfigurationManager.AppSettings["key"].ToString()
很长一段时间我都以为这只是我工作的地方的怪癖,但我搜索了一下,看来这不仅仅是一些一次性的事情。人们做了相当多的事情,但据我所知并没有真正谈论它。
这个blog, for example, makes sure to call .ToString()
on AppSettings, and so does this blog
此外,all the programmers on this question 确保对 AppSettings 集合调用 .ToString()
。
为了确保我不会发疯,我翻阅了 Visual Studio 中的方法,这向我保证,是的,AppSettings[key]
是强类型字符串,并且 "no actual conversion is performed" 调用 .ToString()
.
在我看来,AppSettings[key]
和 AppSettings[key].ToString()
之间唯一真正的区别是抛出 NullReferenceException 的可能性。
所以我的问题是:
这样做是否有任何技术原因,或者出于某种原因它是广泛推荐的 C# 最佳实践,还是它只是一个没有实际意义的怪癖?
Is there any technical reason for doing this, or is it a widely-recommended C# best practice for some reason, or is it just a weird quirk with no real meaning?
后者。调用 ToString
没有用。只会害人害己。
ConfigurationManager.AppSettings
是 NameValueCollection
类型,访问者 returns a string already 就是其中的类型。调用 ToString
只能导致 NullReferenceException
。它没有任何积极影响。
我认为这样的代码可能存在的一个强有力的理由是,它可能最初是在 ConfigurationManager
引入 .NET 2 之前编写的 1。
以前,访问 Configuration
class 时其 AppSettings
属性 会返回 AppSettingsSection
。是的,不幸的是,有一个 returns object
而不是 string
.
在将他们的代码升级到 .NET 2 时,他们会看到使用 ConfigurationManager
的建议,并且将执行最少的编辑量以使他们的代码使用此 class .并没有想到 about/considered 删除现在多余的尾随 ToString()
。
1评论里说的,估计是很久以前写的,很久以前升级的。但这种代码会被大量复制和粘贴,因此几乎会像病毒式传播一样永久存在。