"字符串" vs." string"关于IsNullOrWhiteSpace()的快速提示

时间:2016-01-04 18:59:50

标签: c# visual-studio-2015

在Visual Studio 2015中工作,我对条件的影响进行了条件检查:

if(String.IsNullOrWhiteSpace(stringToTest))

我看到一个IDE001 quick tip or action暗示"名称可以简化"建议更正:

if(string.IsNullOrWhiteSpace(stringToTest))

唯一不同的是使用string代替String

full quicktip

MSDN examples使用带有String的大写字母S,this SO answer说明" string是C#中System.String的别名。从技术上讲,没有区别。"

要明确的是,我的问题依赖于String vs. string内的答案,但我提出的问题不同于那里提出的问题。

同样相关的是this SO question,虽然那里的答案并没有真正解决这个问题。这个特殊问题与我的问题非常相似,但是我注意到它被标记为the other SO question的副本。 OP的there is a comment表明这是2015年才出现的全新行为。

我的问题

我的问题是,如果两个变量类型是等价的,并且MS示例使用大写版本,为什么我看到使用小写版本的快速操作?是否有更改.NET 4.6框架和VS2015鼓励使用小写版本?我似乎不应该看到这种类型的小费。

4 个答案:

答案 0 :(得分:3)

我只是在猜测,但在我看来,快速提示旨在帮助您简化System.Stringstring,而忽略了using已使其冗余的事实,至少在字符数量方面。

把它称为一个bug(虽然是一个非常小的一个),或者至少IDE过于热心。一个可以认为这是一个更广泛意义上的有效简化,特别是如果你要在代码中一致地使用这些简短的“别名”。作为一名C ++开发人员,我并没有真正看到它,但你去了。

答案 1 :(得分:3)

嗯,比我聪明的人注意到编译水平实际上并没有差别,和你一样(和JohnyL一样,你会看到;),我也认为这是一个错误并得到了我的回答:

  

为什么我看到使用小写版本的快速操作?

this信息丰富(和有趣)的错误讨论中得出,这些是此功能的要点:

  • 它不仅仅是更改字母大小写,而是使用String关键字替换string类型名称。事实上,2只发生了不同的情况只是一个巧合。在某些情况下,字符数不同(Int32 -> int)或名称完全不同(Single -> float)。
  • 小写名称更容易输入。
  • 对于实际上更喜欢代码中string的一致格式的人(它可能依赖于您编写的其他语言及其约定),此功能有助于更改现有源代码的一致性。< / LI>
  • string也是具有明确定义含义的关键字,而String的含义可能因上下文而异。
  

.NET 4.6框架和VS2015是否有变化以鼓励使用小写版本?

据我所知,没有。

顺便说一句,您可以在工具&gt;中更改此行为以符合您的偏好选项&gt;文本编辑器&gt; C#&gt;代码风格 - &gt;取消选中&#34;首选成员访问表达式中的内部预定义类型关键字&#34;。

答案 2 :(得分:1)

编译器没有区别,但IDE快速修复也用于确保良好的样式(例如命名约定)。您正在使用C#进行编程,因此您需要使用其功能(在本例中为bultin类型别名)。

我认为您使用int代替Int32,对吧? stringString也是如此。虽然string技术上的长度没有实际差异,但这仍然是类似的情况。

答案 3 :(得分:0)

我怀疑将System.String更改为string的主要原因是因为它被视为原始的.NET。由于所有原语都有别名 - System.Int32 - &gt; intSystem.Char - &gt; char等,为了保持一致,&#34; string&#34;对待是一样的。浏览各种其他MSDN文档,您会看到这两个文档可以互换使用;我认为这对他们来说是一个简单的疏忽。

无论是否保证,我仍然会使用string而不是String作为快速提示。听起来像是Grandma's Cooking Secret的一个例子,但在这种情况下是否有理由改变这种行为?