{{是什么?在特定的代码行中是什么意思?

OrE*_*lse 2 vb.net datatable

我正在阅读一个代码块,该代码块读取一个Microsoft Access数据库架构。

在其他人之间,我看到了循环的那一行代码

ColName = SchemaTable.Rows(i)!COLUMN_NAME.ToString 
Run Code Online (Sandbox Code Playgroud)

为什么将感叹号用于{!}?

Aak*_*shM 6

MSDN:代码中的特殊字符(Visual Basic)

感叹号(!)运算符

使用 !运算符只能在类或接口上作为字典访问运算符。该类或接口必须具有接受单个String参数的默认属性。紧跟在!之后的标识符 运算符成为作为字符串传递给默认属性的参数值。

Public Class hasDefault
  Default Public ReadOnly Property index(ByVal s As String) As Integer
    Get
      Return 32768 + AscW(s)
    End Get
  End Property
End Class
Public Class testHasDefault
  Public Sub compareAccess()
    Dim hD As hasDefault = New hasDefault()
    MsgBox("Traditional access returns " & hD.index("X") & vbCrLf & 
      "Default property access returns " & hD("X") & vbCrLf & 
      "Dictionary access returns " & hD!X)
  End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

MsgBox的三行输出均显示值32856。第一行使用对属性索引的传统访问,第二行利用index是hasDefault类的默认属性的事实,第三行使用对类的字典访问。

请注意!的第二个操作数。运算符必须是有效的Visual Basic标识符,不能用双引号(“”)引起来。换句话说,您不能使用字符串文字或字符串变量。对MsgBox调用的最后一行的以下更改会产生错误,因为“ X”是一个封闭的字符串文字。

"Dictionary access returns " & hD!"X") 
Run Code Online (Sandbox Code Playgroud)

对默认集合的引用必须是明确的。特别是,您不能使用!后期变量上的运算符。