在关于IsNullOrWhiteSpace()的快速提示中,“String”和“string”的区别是什么?

10
在使用Visual Studio 2015时,我有一个条件检查,其效果如下:
if(String.IsNullOrWhiteSpace(stringToTest))

我看到一个IDE001 快速提示或操作,建议将“名称”简化,并提供了以下更正建议:

if(string.IsNullOrWhiteSpace(stringToTest))

唯一的区别在于使用string代替String

full quicktip


MSDN examples使用大写的S来表示String,而this SO answer解释道:“在C#中stringSystem.String的别名。因此,在技术上,它们没有区别。”

为了明确我的问题,我依赖于String vs. string中的答案,但我的问题与那里所问的不同。

与之相关的还有这个Stack Overflow问题,虽然那里的回答并没有真正解决问题。那个问题与我的非常相似,但它被标记为另一个SO问题的重复。而OP的评论表明这是2015年才出现的全新行为。


我的问题

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


3
这个问题已经是“IDE001 quick tip”的谷歌搜索结果中的第一条了。我认为这已经足以证明你应该定义一下这个术语。 - Lightness Races in Orbit
1
@Pierre-LucPineault:很少见。 - Lightness Races in Orbit
2
@Pierre-LucPineault - 它们相似但不同。我不会期望看到快速提示,因为我是基于其他SO问题的答案。 - user1345223
2
虽然这个问题确实是 https://dev59.com/XlwY5IYBdhLWcg3w0Kgs 的技术重复,但这个问题比那个问题好得多,那个问题的答案也相当糟糕,偏离了主题,并且本身也被错误地关闭为重复。我认为这是一个例外情况,这个问题应该独立存在。因此,我投票支持重新开放。 - Lightness Races in Orbit
1
@mikez:问题并没有要求提供一个选项来更改此代码修复是否出现。原始问题也没有这样要求。这就是问题所在!SLaks的答案实际上不是任何一个问题的答案。 - Lightness Races in Orbit
显示剩余8条评论
4个回答

4
好的,像比我聪明的人们已经指出,在编译级别上实际上没有区别,就像你一样(以及像JohnyL一样),我也认为这是一个bug,并且找到了导致我得出答案的原因:
“我为什么会看到使用小写版本的快速操作?”
从这个有趣的错误讨论中得到的信息(取自此处),这些是该功能的主要要点:
- 它不仅仅改变字母大小写,它将String类型名称替换为string关键字。两者恰好只因大小写而异是巧合。在一些情况下,字符数是不同的(例如Int32变成int),或名称完全不同(例如Single变成float)。 - 小写名字更容易输入。 - 对于那些喜欢代码中保持一致格式的人(可能取决于你编写的其他语言和其惯例),这个功能可以帮助更改现有源代码以保持一致性。 - string也是具有明确定义含义的关键字,而String的含义可能根据上下文而不同。
至于“.NET 4.6框架和VS2015是否有任何更改来鼓励使用小写版本?” 这方面,据我所知,没有。
顺便说一下,在“工具”>“选项”>“文本编辑器”>“C#”>“代码样式”中可以更改此行为以适合你的偏好——取消选中“在成员访问表达式中使用内在预定义类型关键字”。

3
我只是推测,但我认为快捷提示旨在帮助您将 System.String 简化为 string,忽略了您的 using 已经使其变得冗余,至少从字符计数的角度来看是这样。可以称之为一个错误(尽管是极其微小的),或者至少是IDE过于热衷。从更广泛的意义上讲,“别名”的简化在某种程度上是有效的,特别是如果您要在代码中一致地使用它们。作为一个C++开发人员,我并没有真正看到它,但就是这样。

1

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

我认为您正在使用int而不是Int32,对吗?所以对于stringString也是同样的情况,虽然从技术上讲string的长度没有真正的区别,但仍然类似。


0

我怀疑将System.String更改为string的主要原因是因为它被视为.NET的原始类型。由于所有原始类型都有别名- System.Int32 -> intSystem.Char -> char等等,为了保持一致,"string"也被同样对待。在浏览各种其他MSDN文档时,你会看到这两种用法可以互换使用;我认为这只是他们犯的一个简单的疏忽。

无论是否有必要,根据快速提示,我仍然会使用string而不是String。听起来像是一个奶奶的烹饪秘诀的例子,但在这种情况下,是否有理由改变这种行为呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接