2015-11-26 68 views
0

我的應用程序中有一些代碼循環遍歷數據表中的行。我收到警告日誌「延遲分辨率;運行時錯誤可能發生」我想知道是否有人對如何清除它們提出任何建議。Datatable - 延遲分辨率;運行時錯誤可能發生

For Each row In dt.Rows 
    RowCount += 1 
    If row("SelfRating") IsNot DBNull.Value Then 
     If row("SelfRating") > 0 Then 
      EmployeeCompletedRows += 1 
     End If 
    End If 
    If row("ManagerRating") IsNot DBNull.Value Then 
     If row("ManagerRating") > 0 Then 
      ManagerCompletedRows += 1 
     End If 
    End If 
Next 

回答

0

一個對象被分配給一個聲明爲對象數據類型的變量是原因。

當您將變量聲明爲Object時,編譯器必須執行後期綁定,這會在運行時導致額外的操作。它還會將您的應用程序暴露給潛在的運行時錯誤。如果您聲明該變量是特定類型的,則編譯器可以在編譯時執行早期綁定。這會提高性能,控制對特定類型成員的訪問,並提高代碼的可讀性。

此外,默認情況下,此消息應該是警告。

隨着顯示出你的變量及其類型,很難除了你的for循環不指定什麼row是說......這可能是問題

嘗試......

For Each row As DataRow In dt.Rows... 

在這裏,我指定對象類型的前期,這是沒有後期綁定...

也轉動Option Strict On它的一個偉大的朋友有。

+0

使用'Option Infer On',行迭代器將被轉換爲'DataRow'。 'row(「SelfRating」)'然而總是'Object',所以像'row(「SelfRating」)> 0'這樣的表達式會產生警告。 – Plutonix

+0

我同意但是我又想讓編譯器在出現問題時拋出......不依靠編譯器將我的對象轉換爲類型。這是一個很好的做法,以指定類型... – Codexer

+0

我並不反對。 '對於每一行......'*可能是問題; 'row(「SelfRating」)'*明確*會導致錯誤,但沒有提及。 – Plutonix