調用另外一個同名的重載函數漏掉括號出現的嚴重問題 - 中國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 |