关于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
,对吧? 对于string
和String
。 虽然技术上string
长度没有实际差异,但这仍然是类似的情况。
我怀疑将System.String
更改为string
主要原因是因为它被视为原始的.NET。 并且因为所有原语都有别名System.Int32
– > int
, System.Char
– > char
等,为了保持一致性,“string”被视为相同。 通过各种其他MSDN文档,您将看到两者可以互换使用; 我认为这是他们的一个简单疏忽。
无论是否保证,我仍然会使用string
over String
作为快速提示。 听起来像奶奶烹饪秘密的一个例子,但在这种情况下是否有理由改变这种行为?