基本技术
保持可用的错误更正错误
Dustin Campbell
本文部分基于 Visual Studio 的预发布版本。 所有信息都均有可能更改。
内容
引入错误更正
使用键盘应用错误更正
修复无效的代码
使用了正确的类型转换
更正拼写错误
导入命名空间
生成新的类型和成员
结论
其中一个最有用的功能的 Microsoft Visual Basic 编辑体验,Microsoft Visual Studio 中的是后台编译。 您可能已经熟悉此功能,因为它是在精神类似于拼写和语法检查器在 Word 中找到。 当您键入代码,则 Visual Basic 编译器在后台运行。 当您键入错误时,它是一个曲线在编辑器中带有下划线,添加到错误列表窗口。
Visual Studio 2005,才能修复错误,只指南来自主要错误消息本身。 可能,Visual Basic 编译器生成旨在说明错误是不仅如何修复的错误消息。
让我们看一个示例。 假设您有以下 VBA 代码:
Module Module1
Sub Main()
Dim i As Integer = "1"c
End Sub
End Module
因为不清楚应从字符为整型的转换,上述代码将产生编译器错误。 编译器应插入转换来生成 ASCII 值"1"的 C,它应插入一个产生"1"的数字值的转换或 c 吗? 编译器有没有选项,但若要生成此错误消息:
无法为整型转换 char 的值。 使用 Microsoft.VisualBasic.AscW 解释为 Unicode 值字符或 Microsoft.VisualBasic.Val 将其解释为数字。
虽然上述错误消息指向解释如何解决问题的好长度,它需要更多的编码,在您实际修复它。
引入错误更正
为了便于解决错误,错误更正 UI 推出。 在 Visual Studio 2005 和 2008,当在编辑器中,键入错误指示智能标记可用则该位置,如 图 1 所示,曲线下划线将添加一个小的红色条。
图 1 错误曲线与一个智能标记指示器
如果您将鼠标悬停在智能标记指示器,折叠智能标记将出现工具提示说明一起中。 这是如图所示在 图 2 中。
图 2 折叠智能标记
在中 图 3 单击智能标记上的展开选项可用于此特定代码错误的纠错 UI。
图 3 扩展智能标记与可用的错误更正
纠错 UI 便于快速准确地修复错误。 预览窗口清楚地显示内容会对您的代码进行更改,单击上的两个超链接以应用一个修复程序的一个简单问题。
有时,一个特定的编译器是修复在某些情况下,而不是全部。 在这些 doubtful 情况下在 VBA IDE 乐观将创建一个智能标记指示器主要以提高性能的该错误。 是时间的创建一个智能标记指示器的错误的可能固定比若要检查每个错误,以确定它是否明确可以创建该标记前修复某些错误快得多。 没有任何错误更正的智能标记指示器悬停时, 您将看到 图 4 所示的"不更正建议"消息。
图 4 无纠正建议
使用键盘应用错误更正
可以应用错误的更正,方法是使用键盘和鼠标。 如果在有智能标记指示器的错误曲线上位于编辑器插入符号,您可以按 Shift + Alt + F10 立即扩展智能标记并显示错误的更正选项。 使用展开智能标记,在上的箭头和向下箭头键可将导航选项,并且可以通过按 Enter 键应用了错误的更正。 如果您 dislike Shift + Alt + F10 键盘快捷键 Ctrl +。 此外将显示智能标记。 (找个人到 Ctrl +。 更容易记住,然后按 !)
修复无效的代码
通常,代码包含错误只是因为它有一个无效的结构。 一个常见的错误是编写代码都不均衡的括号。 您可以在下面的代码发现错误吗?
Module Module1
Sub Main()
Dim quad = Function(a, b, c) _
Function(x) (a * x * x) + (b * x) + c
Dim f = quad(1.0, -79.0, 1601.0)
Console.Write(f(42.0)
End Sub
End Module
当代码不编译因为它是无效 (例如,在中的缺少括号 Console.Write 上面调用),在 VBA IDE 将建议使代码更有效,如果应用的错误更正。 在 图 5 ,错误更正提供了要插入缺少的括号中。
图 5 的插入括号错误更正
无效的代码的错误更正不限于在方法体内的代码。 例如,假设您有一个只读属性,并希望将其转换到完整的一个设置属性:
Class Person
Private _name As String
Public ReadOnly Property Name() As String
Get
Return _name
End Get
End Property
End Class
要添加一个设置上述代码,
- 将编辑器插入符号移动后结束获取。
- 按输入。
- 类型设置。
- 再次按 Enter。
会让您用下面的代码无效:
Class Person
Private _name As String
Public ReadOnly Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
End Set
End Property
End Class
若要使属性成为有效,只读关键字需要被删除。 现在,删除关键字是常用,但更容易、 更高效如果您使用错误修正执行该作业:
- 请按向上可将编辑器插入符号移动到该错误的曲线。
- 按 Ctrl +。 显示建议错误更正图 6 所示。
- 按下焦点,第一个错误更正。
- 按应用。
图 6 的只读属性与一个 Setter 错误更正
您可以看到不只执行错误更正帮助您编写正确的代码,也可以是一个大的时间的保护程序!
使用了正确的类型转换
通过默认,Visual Basic 保留严格关闭键入。 这使您得以利用数据类型隐式转换和后期绑定的 Visual Basic 编译器的支持:
Module Module1
Sub Main()
Dim s As String = 42
End Sub
End Module
给定上述代码,编译器将正确插入字符串将从整数类型转换。
但是,濡傛灉浣跨敤严格键入 Visual Basic 错误更正可帮助您插入相同的类型转换的编译器将如果严格键入已关闭。 图 7 显示了错误更正上面时启用严格键入代码。
图 7 转换到一个 String 类型的整数错误更正
更正拼写错误
有时代码错误只是可能拼写错误。 在类型名称的拼写错误,Visual Basic 将提供错误更正建议具有类似名称的现有类型。 考虑以下代码包含拼写错误的:
Class Class1
End Class
Class Class2
End Class
Module Module1
Sub Main()
Dim c As New Clss
End Sub
End Module
上面代码错误地尝试实例化的类名为 Clss,但不是存在。 在这种情况下,两个错误更正有,一个更改为 Class1 和另一个 Class2,更改 Clss Clss,如 图 8 所示。
图 8 为拼写错误的错误更正
当前,拼写检查器相当简单,只适用于类型名称。 但是,这是 VBA 团队希望提高在将来的版本中的地方。
导入命名空间
后传送 Visual Studio 2005,VBA 团队收到其他错误更正的几个请求。 其中的主要是用于自动添加 Imports 语句的错误纠正。 可以非常 irritating 开始使用类型和实现您忘记了导入的命名空间。 渚嬪的方式 假设您已打开并从磁盘读取一个文件中使用 System.IO.File 类:
Module Module1
Sub Main()
Dim fileName = Path.Combine("C:\Temp", "Sizes.txt")
Using f = File.OpenRead(fileName)
End Using
End Sub
End Module
此代码会导致错误,如果您还没有导 System.IO 命名空间。 在 Visual Studio 2008 中, 有两个的可能的错误更正此错误的:
- 导入命名空间。
- 限定引用。
图 9 所示。 通过选择第一个建议的纠错,我们可以轻松地导入 System.IO 命名空间。
图 9 添加 Imports 语句的错误更正
这 begs 问题: 如果导入命名空间将更改您的代码的含义吗? 假设上述代码将使用 Windows 演示框架 (WPF) 来创建使用 Sizes.txt 文件中读取数据的一个 System.Windows.Shapes.Rectangle。 使用 WPF 引用添加,首先实例化一个新的矩形:
Imports System.IO
Module Module1
Sub Main()
Dim fileName = Path.Combine("C:\Temp", "Sizes.txt")
Using f = File.OpenRead(fileName)
Dim r As New Rectangle
End Using
End Sub
End Module
像之前,命名空间未被导入还,因此使用纠错 UI 如图所示 图 10 中为您导入。 但是,此时间的问题。 System.Windows.Shapes 命名空间还包括类型命名路径,因此导入命名空间会更改您的代码的含义。
图 10 的导入 System.Windows.Shapes 错误更正
幸运的是,错误更正添加 Imports 语句的内置逻辑以避免这种情况。 错误更正识别问题,并显示如图所示 图 11 中添加导入验证错误对话框。
图 11 的添加导入验证错误对话框
此对话框为您提供用于调整,错误更正,以便您的代码的含义不会更改两个选项:
- 导入 System.Windows.Shapes 并限定受影响的标识符。
- 不导入 System.Windows.Shapes,但更改到 Windows.Shapes.Rectangle 的矩形。
通过选取第一个选项,Imports 语句添加 System.Windows.Shapes 的并且是完全限定的路径对:
Imports System.IO
Imports System.Windows.Shapes
Module Module1
Sub Main()
Dim fileName = System.IO.Path.Combine("C:\Temp", "Sizes.txt")
Using f = File.OpenRead(fileName)
Dim r As New Rectangle
End Using
End Sub
End Module
再次,仅 Visual Studio 2008 提供了此错误纠正。 如果您使用 Visual Studio 2005 您将看不添加 Imports 语句的建议。
生成新的类型和成员
VBA 未完成错误更正还! Visual Studio 2010 中将介绍一种从使用该对话框可以轻松地生成新的类型和成员的情况称为生成的新功能。 对于 Visual Basic,这项功能实现为一组错误的更正以便可以通过现有的错误更正访问它们。 在许多情况下,使用错误更正从生成提供了建议的任何以前的编译器错误。 渚嬪的方式 回顾 图 4 。 在 Visual Studio 2008 中,该代码有没有可用的错误更正。 但在 Visual Studio 2010,新的生成中使用错误的更正建议。 图 12 显示相同的代码之间 Visual Studio 2008,Visual Studio 2010 中错误更正差异。
图 12 生成类
通过选择第一个建议,在一个新的文件中生成新的类名为客户。 现在,您可以继续编写的代码使用客户类的成员,并使用错误更正存根出您的成员。 渚嬪的方式 图 13 显示了错误更正后,您已将值分配给一个还没有被声明的类的成员。
图 13 生成属性或字段
选择第一个建议后, 生成的客户类如下:
Class Customer
Property Name As String
End Class
在 Visual Studio 2010,您将能够利用的最大效率使用错误更正从生成。
结论
错误更正是 VBA 的编码体验的基本组成部分。 执行它们可以帮助您立即发现并修复错误,不仅可以更有效地编写代码来使用它们。 本文仅介绍了 Visual Basic 所提供的建议数百的图面。 而且与 Visual Studio 2010 的大多数编码错误的错误纠正。
不要忘记使用 Ctrl +!
将您的问题和提出发送到 instinct@microsoft.com.
Microsoft Visual Basic IDE 程序管理器 Microsoft Visual Studio 语言小组 Dustin 斌 。 他处理主要在编辑器和调试器产品功能。 作为一个编程语言螺母,他还对其他语言 (如 C# 和 F # 的 Visual Studio 中。 加入 Microsoft 之前, Dustin 有助于开发,获奖的 CodeRush 和重构! 在开发人员快速公司的工具 Dustin 的喜爱的颜色为蓝色。