我遇到了一些我想解釋的內容。我有一個函數InitializeValues()來設置一個組合框,並將數據源設置爲一個數據表。使用公共方法GetFileSourceData從不使用參數的類DGVMain_Functions的實例中檢索數據表。
問題是,調用GetFileSourceData(MyConnectionString)將實際編譯並運行。當數據表返回並試圖設置爲cbo的數據源時發生運行時錯誤。正常調用GetFileSourceData()正常工作。 我問過另一位開發人員,他認爲我有一些陳舊的參考,因此我清理了該項目,然後刪除了我的調試文件夾中的所有內容,然後重新構建,但它仍然具有相同的行爲。Vb.net:調用函數不匹配原型通過編譯器檢查
我的問題是這樣的,爲什麼編譯器接受這一點,而不是拋出語法錯誤,此外爲什麼它甚至會到達可以切入這個不應該存在的函數的地步,並讓它失敗返回?
編輯:把選項嚴格上,確實讓編譯器捕捉這一點。 「Option Strict On禁止從'String'到'Integer'的隱式轉換,但這仍然不是我想看到的錯誤,我想知道它爲什麼不顯示」沒有這樣的重載/定義該功能存在」
的錯誤是這樣的:
An error occurred creating the form. See Exception.InnerException for details. The error is: ERROR: ERROR: Conversion from string "user id=XXXX;data source=XXXXX" to type 'Integer' is not valid.Microsoft.VisualBasicFileProcessor. "InnerException = {"Input string was not in a correct format."}"
Private Sub InitializeValues()
cboFileSource.DisplayMember = "filesource"
cboFileSource.ValueMember = "filesource"
'first call works fine since it matches
cboFileSource.DataSource = DgvMain_functs.GetFileSourceData()
'below is the call that gets through the complier and actually runs, fails on return
cboFileSource.DataSource = DgvMain_functs.GetFileSourceData(MyConnectionString)
End Sub
Public Function GetFileSourceData() As DataTable
Try
Dim dt As DataTable
Dim strSQL As String = "select distinct filesource from FileUpload_FolderPath"
dt = SqlHelper.ExecuteDataset(MyConnectionString, CommandType.Text, strSQL).Tables(0)
Return dt
Catch ex As Exception
Throw New Exception("Error in DGVMain_Functions: " & ex.Message & ex.Source)
End Try
End Function
我用的是默認的。選項,不知道那些是atm。你在問「顯式」和「嚴格」選項標誌r飛行?現在你已經提出了讓我看看這些。 – 2013-03-21 16:57:39
奇怪。我可以確認它完全用Option Strict On編譯,這行'ListBox1.DataSource = GetFileSourceData(CInt(「123」))'('Option Strict'建議通過'CInt()'''轉換''123「')。 – Neolisk 2013-03-22 01:01:38