如果代码的整齐排列(重格式化)不会自动设置延续行的格式,请手动将延续行缩进一个制表位。 但是,始终在列表中使项左对齐。
a As Integer,
b As Integer
在方法和属性定义之间至少添加一个空白行。
将注释放在单独的行上,而不是放在代码行的末尾。
注释文本以大写字母开头,以句点结尾。
在注释分隔符 ('
) 和注释文本之间插入一个空格。
' Here is a comment.
请勿在注释周围使用格式化的星号块。
使用 Main
方法时,请为新的控制台应用程序使用默认构造,并将 My
用于命令行参数。
Sub Main()
For Each argument As String In My.Application.CommandLineArgs
' Add code here to use the string variable.
End Sub
String 数据类型
使用字符串内插来连接短字符串,如下面的代码所示。
MsgBox($"hello{vbCrLf}goodbye")
若要在循环中追加字符串,请使用 StringBuilder 对象。
Dim longString As New System.Text.StringBuilder
For count As Integer = 1 To 1000
longString.Append(count)
事件处理程序中的宽松委托
请勿将参数(Object
和 EventArgs
)显式限定到事件处理程序。 如果不使用传递给事件的事件参数(例如 sender As Object
,e As EventArgs
),请使用宽松委托,并在你的代码中将事件参数排除在外:
Public Sub Form1_Load() Handles Form1.Load
End Sub
无符号数据类型
使用 Integer
而不是无符号的类型,除非它们是必需的。
在声明行上初始化数组时,请使用简短的语法。 例如,请使用以下语法。
Dim letters1 As String() = {"a", "b", "c"}
请勿使用以下语法。
Dim letters2() As String = New String() {"a", "b", "c"}
将数组指示符放在类型上,而不是放在变量上。 例如,请使用以下语法:
Dim letters4 As String() = {"a", "b", "c"}
请勿使用以下语法:
Dim letters3() As String = {"a", "b", "c"}
声明和初始化基本数据类型的数组时,请使用 { } 语法。 例如,请使用以下语法:
Dim letters5 As String() = {"a", "b", "c"}
请勿使用以下语法:
Dim letters6(2) As String
letters6(0) = "a"
letters6(1) = "b"
letters6(2) = "c"
使用 With 关键字
对一个对象进行一系列调用时,请考虑使用 With
关键字:
With orderLog
.Log = "Application"
.Source = "Application Name"
.MachineName = "Computer Name"
End With
使用异常处理时使用 Try...Catch 和 Using 语句
请勿使用 On Error Goto
。
使用 IsNot 关键字
请使用 ... IsNot Nothing
,而不是 Not ... Is Nothing
。
New 关键字
使用短实例化。 例如,请使用以下语法:
Dim employees As New List(Of String)
上面的行等效于以下行:
Dim employees2 As List(Of String) = New List(Of String)
将对象初始值设定项用于新对象,而不是无参数构造函数:
Dim orderLog As New EventLog With {
.Log = "Application",
.Source = "Application Name",
.MachineName = "Computer Name"}
使用 Handles
而不是 AddHandler
:
Private Sub ToolStripMenuItem1_Click() Handles ToolStripMenuItem1.Click
End Sub
使用 AddressOf
,并且请勿显式实例化委托:
Dim closeItem As New ToolStripMenuItem(
"Close", Nothing, AddressOf ToolStripMenuItem1_Click)
Me.MainMenuStrip.Items.Add(closeItem)
定义事件时,请使用简短的语法,并且让编译器来定义委托:
Public Event SampleEvent As EventHandler(Of SampleEventArgs)
Public Event SampleEvent(ByVal source As Object,
ByVal e As SampleEventArgs)
在调用 RaiseEvent
方法之前,请勿验证事件是否为 Nothing
(null)。 RaiseEvent
在引发事件之前会检查是否为 Nothing
。
使用 Shared 成员
使用类名来调用 Shared
成员,而不是从实例变量进行调用。
使用 XML 文本
XML 文本可简化在使用 XML 时遇到的最常见的任务(例如加载、查询和转换)。 使用 XML 进行开发时,请遵循以下准则:
使用 XML 文本来创建 XML 文档和片段,而不是直接调用 XML API。
在文件或项目级别导入 XML 命名空间以利用 XML 文本的性能优化。
使用 XML 轴属性访问 XML 文档中的元素和属性。
使用嵌入的表达式来包含值并从现有的值创建 XML,而不是使用 Add
方法等 API 调用:
Private Function GetHtmlDocument(
ByVal items As IEnumerable(Of XElement)) As String
Dim htmlDoc = <html>
<table border="0" cellspacing="2">
From item In items
Select <tr>
<td style="width:480">
<%= item.<title>.Value %>
<td><%= item.<pubDate>.Value %></td>
</table>
</body>
</html>
Return htmlDoc.ToString()
End Function
LINQ 查询
为查询变量使用有意义的名称:
Dim seattleCustomers = From cust In customers
Where cust.City = "Seattle"
为查询中的元素提供名称,确保匿名类型的属性名称是使用 Pascal 大小写格式正确大写的:
Dim customerOrders = From customer In customers
Join order In orders
On customer.CustomerID Equals order.CustomerID
Select Customer = customer, Order = order
如果结果中的属性名称模棱两可,请对属性重命名。 例如,如果你的查询返回一个客户名称和一个订单 ID,请对它们进行重命名,而不是在结果中将它们保留为 Name
和 ID
:
Dim customerOrders2 = From cust In customers
Join ord In orders
On cust.CustomerID Equals ord.CustomerID
Select CustomerName = cust.Name,
OrderID = ord.ID
在查询变量和范围变量的声明中使用类型推理:
Dim customerList = From cust In customers
对齐 From
语句下的查询子句:
Dim newyorkCustomers = From cust In customers
Where cust.City = "New York"
Select cust.LastName, cust.CompanyName
在其他查询子句前面使用 Where
子句,使之后的查询子句作用于经过筛选的数据集:
Dim newyorkCustomers2 = From cust In customers
Where cust.City = "New York"
Order By cust.LastName
使用 Join
子句显式定义联接操作,而不是使用 Where
子句隐式定义联接操作:
Dim customerList2 = From cust In customers
Join order In orders
On cust.CustomerID Equals order.CustomerID
Select cust, order
安全编码准则