調用另外一個同名的重載函數漏掉括號出現的嚴重問題

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- 調用另外一個同名的重載函數漏掉括號出現的嚴重問題 (http://www.webasp.net/article/18/17019.htm)
-- 作者:未知
-- 發佈日期: 2005-03-16
我的ASP.NET不能調試了,由於只是改一個頁面,覺的不調試也行吧。仔細檢查一下代碼就可以了。

可是今天碰到的問題實在是沒有檢查出來,後來把代碼拷貝到筆記本上調試,單步跟蹤一下就找出問題來了!

Public Function GetInsertSql() As String



Dim strSql As String



strSql = String.Format("Insert Into {0}(inputID,itemID, 數據) values({1},{2},{3});", _TableData, _ReportID, _ItemID, _value)



Return strSql



End Function







Public Function GetInsertSql(ByVal ddl As DropDownList) As String







If ddl.Items.Count = 0 Then



Return GetInsertSql '這裡少了括號,應該是Return GetInsertSql()



'因為在VB.NET中函數名代表要返回的對象,編譯不會出現錯誤。



'如果是直接用GetInsertSql的話是個Nothing



'如果是GetInsertSql()表示調用上面的重載函數GetInsertSql(),這樣才是正確的



'可以這樣理解: 系統隱式的聲明了一個這樣的變量,變量名是函數名,類型是函數的返回類型



End If







Dim strSql As String = ""



Dim V As Double



Dim sel As String = ddl.SelectedValue



For Each item As ListItem In ddl.Items



V = IIf(item.Value = sel, _value, 0)



strSql &= String.Format("Insert Into {0}(inputID,itemID,數據,版種) values({1},{2},{3},'{4}');", _TableData, _ReportID, _ItemID, V, item.Text.Trim())



Next







Return strSql







End Function







真是個很隱蔽的錯誤,以後要注意了,括號自己加上的好(以前都是VB.NET自動加上括號的)



對於這樣的問題,編譯器應該提出警告才對,或者當取消用函數名來代表返回值。



雖然MSDN是這樣讚美的:



將返回值分配給函數名的優點是,直到程序遇到 Exit Function 或 End Function 語句時函數才返回控制。這樣就可以先分配一個初步的值,以後如有必要再進行調整。





webasp.net