65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 2015 中的代码辅助功能

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (22投票s)

2016年5月3日

CPOL

8分钟阅读

viewsIcon

44520

downloadIcon

569

在本系列文章中,我将介绍 Visual Studio 2015 的开发如何将您的生产力提升 n 倍,并使您能够编写更清晰、更优化的代码。

引言

我一直非常钦佩 Visual Studio IDE(集成开发环境)。Visual Studio 已被证明是我最好的 IDE,我几乎所有的编码和调试工作都使用它。我对 IDE 的热爱促使我开始撰写一系列文章,以解释 Visual Studio 2015 现在为开发人员在跨平台开发、云开发、代码辅助、重构、调试等方面提供了什么。Visual Studio 的强大功能不仅限于开发和编码,它还为编码、开发、代码分析或部署所需的所有需求提供了一站式解决方案。我将在整个系列中使用 Visual Studio Enterprise 2015,并解释如何利用 Visual Studio 来提高生产力。在本系列文章中,我将介绍 Visual Studio 2015 的开发如何将您的生产力提升 n 倍,并使您能够编写更清晰、更优化的代码。

学习 Visual Studio 2015 系列

代码辅助

在早期版本的 Visual Studio 中,您一定见过,当您编写有错误的代码时,代码编辑器会通过工具提示提供建议。此功能已大有改进,在 Visual Studio 代码编辑器中显示为灯泡图标。此选项在 Visual Studio 代码编辑器中进行编码时为您提供实时建议,以提高代码质量或修复编码问题。它有助于您识别语法错误,提供有用的代码提示,并协助您进行静态代码分析。我将使用一个示例代码来解释这些增强功能,为此,我在 Visual Studio 中创建了一个名为 VisualStudio2015ConsoleApplication 的控制台应用程序。

语法错误建议

假设您的代码中存在语法错误,就像我在下图中故意做的那样。

当您将鼠标单击到标有红色下划线的有错误变量上时,灯泡图标会立即显示,并显示问题摘要、错误代码以及指向文档的链接。它还显示了可能的代码修复和重构列表。在上面的示例中,我正在编写一个 add 方法,接收两个参数 a 和 b,但我尝试返回 a+bh 的结果。由于“bh”在方法中未声明,也未作为参数传递,因此灯泡图标会显示出来,并提供有关如何处理此变量的一些可能的选项或建议。它建议生成一个名为“bh”的变量,创建一个字段或属性。

如果将鼠标悬停在错误行上,将显示一个灯泡图标,其中包含错误和潜在的修复方法。

请注意,您也可以使用 Ctrl+. 通过键盘查看错误。如果您单击“显示潜在修复”,将获得与第一个图像中显示的相同的选项。或者,如果您碰巧怀疑灯泡图标并且构建了您的控制台应用程序,您将再次看到与以下相同的错误。

语法错误辅助显示灯泡图标、错误描述以及指向显示可能修复方法的链接。当您单击错误代码(例如 CS0103)时,您将被重定向到错误代码的文档。它还提供在您选择灯泡图标提供的任何建议后预览更改的选项。因此,如果我单击“预览更改”,它将显示我选择的选项的预览,如下所示。

现在我们不必手动转到代码并显式定义该变量。只需单击“应用”按钮,Visual Studio 就会处理所有事情。因此,我选择的第一个选项现在已反映在我的代码中。

我记得我曾经使用 ReSharper 来实现这些即时修改以提高生产力。我们看到在编译应用程序时遇到了相同的错误,这证明灯泡图标的代码建议可以在编译应用程序并了解实际错误之前帮助我们编写无错误的代码。因此,我们不必等到编译应用程序才知道编译时错误。您可以测试不同的场景,以探索灯泡图标在我们的日常编程中提供的语法错误建议。

代码建议

让我们看另一个场景。假设我定义了一个名为 ICalculator 的接口,并添加了一个名为 Calculator 的类,并且 calculator.cs 类继承自该接口。

接口

   1: interface ICalculator
   2:    {
   3:        int Add(int a, int b);
   4:        int Subtract(int a, int b);
   5:        int Multiply(int a, int b);
   6:        float Divide(float a, float b);
   7:    }

   1: public class Calculator : ICalculator
   2:    {
   3:    }

您会看到在 Calculator 类中对 ICalculator 接口的名称下方有一个红色的错误线。您可以像在上一个示例中那样看到灯泡图标,即悬停或单击错误。在这里,您将看到灯泡图标正在使用一些额外的概念信息来帮助我们,例如我们正在使用的接口包含几个需要在 Calculator 类中实现的方法。

因此,我们看到灯泡不仅帮助我们查找语法错误,还为我们编程中犯的错误建议了概念或逻辑解决方案。当您显示“显示潜在修复链接”时,它将以详细的用户友好方式显示此错误的可能修复方法,并提供预览和修复的选项。

在上图中,您可以看到代码辅助提供了隐式和显式实现 ICalculator 接口的选项,如果我们进行分析,我们可以清楚地说,在這種情況下,開發人員只能選擇這兩種選項。此外,它還顯示了指向錯誤說明的鏈接。如果您選擇第一個選項並選擇“預覽更改”鏈接,您將看到以下預覽,如果這是您需要的,您可以選擇應用它。

因此,单击“应用”,我们得到以下类,其中所有接口方法都具有默认实现。

   1: public class Calculator : ICalculator
   2:    {
   3:        public int Add(int a, int b)
   4:        {
   5:            throw new NotImplementedException();
   6:        }
   7:  
   8:        public float Divide(float a, float b)
   9:        {
  10:            throw new NotImplementedException();
  11:        }
  12:  
  13:        public int Multiply(int a, int b)
  14:        {
  15:            throw new NotImplementedException();
  16:        }
  17:  
  18:        public int Subtract(int a, int b)
  19:        {
  20:            throw new NotImplementedException();
  21:        }
  22:    }

同样,灯泡图标在开发和编码过程中提供了大量的代码建议选项,遵循这些选项,我们可以提高编写代码的生产力,而无需不必要地编译应用程序和手动编写代码。

重构建议

灯泡图标不仅限于代码建议和语法错误建议,还具有强大的重构功能。当我添加 Calculator 类时,该类添加了一些默认的命名空间,如下所示。

在上图中,我们可以看到类中默认添加了一些当前未使用的命名空间。当您将鼠标悬停在这些命名空间上时,灯泡图标会显示出来,并提供一些重构建议,如下所示。

上图显示了灯泡图标的建议,要求“删除不必要的 using”。我们在这里看到 Visual Studio 足以了解代码中需要进行哪些重构,并相应地建议开发人员优化代码。如果您应用该建议,它将从您的代码中删除不必要的“using”。您还可以选择修复当前文档、项目或解决方案中此问题的所有实例。如果我们只想进行此本地更改,我们可以选择“删除不必要的 using”,未使用的 using 将被删除。

快速建议和重构

现在,当我转到我的 Calculator.cs 类并按如下方式定义 Add 方法时。

   1: public int Add(int a, int b)
   2:      {
   3:          int c = a + b;
   4:          return c;
   5:      }

这是定义 add 方法的正确方法,但仔细想想,如果我想重构或优化这个方法怎么办?Visual Studio 2015 为我们提供了一种设施,可以通过编辑器上下文菜单中的一个选项来提供建议,从而快速重构代码。只需右键单击“c”,您将在上下文菜单的顶部看到一个选项,名为“快速操作和重构…”。

请注意,在上面的代码块中,Visual Studio 没有隐式建议任何内容,并且由于存在一些语法错误,但我们可以选择并明确要求 Visual Studio 提供帮助,以了解特定编写的代码是否可以进一步增强、优化、重构。可能出现的情况是,选择此选项也不会显示任何改进代码的建议,这意味着您的代码已经过重构和优化。但在上述场景中,如果我们选择“快速操作和重构…”选项,VS 会给我们两个选项来进一步优化代码。

或,

如果我们仔细查看这两个选项,第一个选项是跳过使用临时变量,直接返回 (a+b)(顺便说一句,这是一个很好的建议),第二个选项是从代码中提取一个方法并将 (a+b) 放入另一个方法中并在那里返回。现在,在这些情况下,开发人员选择哪个选项由他们自己决定。我选择第一个选项并应用了它在预览中显示给我的更改,我得到了看起来比以前更好的代码。

   1: public int Add(int a, int b)
   2:       {
   3:           return a + b;
   4:       }

请注意,这些只是我用来解释 Visual Studio 2015 功能的小例子。可能存在复杂且棘手的情况,在这种情况下,您可能确实需要这些功能的很大帮助。

结论

我从大量可能的场景中选取了几个代表性示例,说明 Visual Studio 2015 的代码助手可以在哪些方面提供帮助。您可以探索 IDE 并进行尝试,以查看更多您感觉与早期版本的 Visual Studio 相比有所改变的情况。在下一节中,我将讨论实时静态代码分析。

参考文献

© . All rights reserved.