2014-10-17 18 views
2

Sample Queries application使用!運算符來引用DataRow中的字段。我在哪裏可以獲得關於! VB.Net在LINQ到DataSet中使用的運算符?

Option Strict Off 

Imports System.Data 
Imports System.Linq 

Module Program 

    Public Sub Main() 
     Dim numbers() As Integer = {5, 4, 1, 3, 9, 8, 6, 7, 2, 0} 
     Dim table As New DataTable("Numbers") 
     table.Columns.Add("number", GetType(Integer)) 
     For Each n In numbers 
      table.Rows.Add(New Object() {n}) 
     Next 

     Dim lowNums = From row In table.Rows _ 
         Where row!number < 5 
         Select row 

     For Each x In lowNums 
      Console.WriteLine(x!number) 
     Next 
    End Sub 

End Module 

什麼是!運營商叫? 規則記錄在哪裏?

+2

您正在通過關閉Option Strict Off來解決問題。 – 2014-10-20 16:00:00

+0

@ChrisDunaway,我同意你的意見。這純粹是一個學術問題,它取決於Option Strict Off。否則,你必須使用row.Field(Of Integer)(「數字」) – JJS 2014-10-20 16:08:26

回答

5

這是(在這方面)的Exclamation point Operator

「只在一個類或者接口作爲字典接入運營商使用運營商的類或接口必須有一個接受一個String默認屬性!緊跟在!運算符後面的標識符變成了作爲字符串傳遞給默認屬性的參數值。「

所以代碼row!number相當於row("number")

該操作符是從VB6遺留結轉和應在VB.NET避免IMO。這與LINQ沒有特別的關係。

你的例子是有點做作,因爲它不會編譯(即使Option Strict Off選項) - 編輯:現在這已得到修正,但仍不能與Option Strict Off選項編譯

「!字符也用作單個字符。」例如Dim s! = 0.12但這不是代碼在您的上下文中的意圖

+0

謝謝!我修復了我的代碼示例。我應該在我發表之前編輯它。 我認爲一個更好的名字是字典訪問操作符,或者更好的是默認字符串索引器屬性操作符 – JJS 2014-10-17 18:12:55

+0

馬特描述得很好。 'x!y'只是'x(「y」)'的'快捷鍵'' – 2014-10-17 18:21:58

相關問題