【问题标题】:"String" vs. "string" in quicktip about IsNullOrWhiteSpace()关于 IsNullOrWhiteSpace() 的快速提示中的“字符串”与“字符串”
【发布时间】:2016-01-19 17:51:46
【问题描述】:

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

if(String.IsNullOrWhiteSpace(stringToTest))

我看到一个 IDE001 quick tip or action 建议“名称可以简化”并建议更正:

if(string.IsNullOrWhiteSpace(stringToTest))

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


MSDN examples 使用大写的 S 和 Stringthis 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 鼓励使用小写版本?看来我不应该看到那种类型的提示。

【问题讨论】:

  • 这个问题已经是“IDE001 quick tip”的第一个谷歌结果。我认为这足以证明你应该定义这个术语。
  • @Pierre-LucPineault:几乎没有。
  • @Pierre-LucPineault - 它们相似但不同。我不希望看到我基于另一个 SO 问题中的答案的快速提示
  • 虽然这个问题确实是stackoverflow.com/q/32187486/560648 的技术复制品,但这个问题比那个问题好多好,后者也有相当糟糕的答案,错过了标记并且有自己被虚假关闭。我认为这是这个问题应该独立存在的那些例外之一。因此,我重新投票。
  • @mikez:该问题不要求提供可以设置更改是否出现此代码修复的选项。原来的问题也没有。那就是问题所在! SLaks 的回答实际上不是对这两个问题的回答。

标签: c# visual-studio-2015


【解决方案1】:

好吧,比我聪明的人已经注意到编译级别实际上没有区别,并且像您一样(以及您将看到的 JohnyL ;),我也认为这是一个错误并得到了导致我答案的原因:

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

取自this 信息丰富(有趣)的错误讨论,以下是此功能的要点:

  • 它不仅改变了字母大小写,还用string 关键字替换了String 类型名称。 2碰巧仅因情况而异的事实是巧合。存在字符数不同 (Int32 -> int) 或名称完全不同 (Single -> float) 的情况。
  • 小写名称更易于键入。
  • 对于实际上更喜欢代码中string 的一致格式的人(它可能取决于您编码的其他语言及其约定),此功能有助于更改现有源代码以保持一致。
  • string 也是一个含义明确的关键字,而String 的含义可能因上下文而异。

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

据我所知,没有。

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

【讨论】:

    【解决方案2】:

    我只是在猜测,但在我看来,快速提示旨在帮助您将 System.String 简化为 string,而忽略了您的 usings 已使其变得多余的事实,至少在以下方面字符计数。

    将其称为错误(尽管是非常小的错误),或者至少是 IDE 变得过分热心。有人可能争辩说,这是一种更广泛意义上的有效简化,特别是如果您要在代码中始终如一地使用这些简短的“别名”。作为一名 C++ 开发人员,我并没有真正看到它,但你去吧。

    【讨论】:

      【解决方案3】:

      编译器没有区别,但 IDE 快速修复也可用于确保良好的样式(例如命名约定)。您正在使用 C# 进行编程,因此您应该使用它的功能(在这种情况下 - bultin 类型别名)。

      我认为您使用的是int 而不是Int32,对吧? stringString 也是如此。尽管从技术上讲,string 的长度没有真正的区别,但情况仍然相似。

      【讨论】:

        【解决方案4】:

        我怀疑将System.String 更改为string 的主要原因是因为它被视为原始.NET。由于所有原语都有别名 - System.Int32 -> intSystem.Char -> char 等,为了保持一致性,“字符串”被视为相同。浏览各种其他 MSDN 文档,您会发现两者可以互换使用。我认为这是他们的一个简单的疏忽。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-15
          • 2010-12-18
          相关资源
          最近更新 更多