关于IsNullOrWhiteSpace()的快速提示中的“字符串”与“字符串”

在Visual Studio 2015中工作,我有一个条件检查效果:

if(String.IsNullOrWhiteSpace(stringToTest)) 

我看到一个IDE001 快速提示或动作,建议“名称可以简化”,建议更正:

 if(string.IsNullOrWhiteSpace(stringToTest)) 

唯一的区别是使用string而不是String

完全快速


MSDN示例使用带String的大写S, 这个SO答案阐明“ string是C#中System.String的别名。所以从技术上讲,没有区别。”

要明确的是,我的问题依赖于字符串与字符串中的答案,但我有一个不同的问题。

这个问题也是相关的,尽管那里的答案并没有真正解决这个问题。 那个特别的问题与我的问题非常相似,但是它被标记为我注意到的另一个SO问题的副本。 OP 的评论表明这是2015年才出现的全新行为。


我的问题

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

我只是推测,但在我看来,快速提示旨在帮助您将System.String简化为string ,忽略了using s使其冗余的事实,至少在字符计数方面。

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

好吧,比我更聪明的是注意到编译级别实际上没有区别,就像你一样(和JohnyL一样,你会看到的);我也认为这是一个错误,并得到了我的回答:

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

从这个信息丰富(和有趣)的错误讨论中获取,这些是此function的要点:

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

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

据我所读,不。

顺便说一下,您可以在工具>选项>文本编辑器> C#>代码样式 – >取消选中“首选成员访问表达式中的内部预定义类型关键字”中更改此行为以符合您的偏好。

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

我认为你使用的是int而不是Int32 ,对吧? 对于stringString 。 虽然技术上string长度没有实际差异,但这仍然是类似的情况。

我怀疑将System.String更改为string主要原因是因为它被视为原始的.NET。 并且因为所有原语都有别名System.Int32 – > intSystem.Char – > char等,为了保持一致性,“string”被视为相同。 通过各种其他MSDN文档,您将看到两者可以互换使用; 我认为这是他们的一个简单疏忽。

无论是否保证,我仍然会使用string over String作为快速提示。 听起来像奶奶烹饪秘密的一个例子,但在这种情况下是否有理由改变这种行为?