我正在嘗試創建的函式從組合框(小、中、大)中獲取輸入,然后根據選擇的內容輸出價格。例如,如果用戶選擇小,則計算價格為 100,如果中:200,如果大:300。我希望在用戶單擊我創建的“計算價格”按鈕后執行該功能。然后我會有一個訊息框告訴用戶“計算出的價格是:{result}。” 我目前只是不斷得到輸出“計算的價格是:0”。在測驗我的作業。這是我用于功能和按鈕單擊的代碼。(注意:我不需要將美元金額作為整數回傳,它們可以只是字串,我對此不太挑剔)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim result As Integer
result = calcpriceFunction(cboUnitType.ToString)
MessageBox.Show("The calculated price is: " & result)
End Sub
Private Function calcpriceFunction(ByVal untype As String) As Integer
Dim price As String
untype = ""
price = ""
If untype = "Small" Then
Return price = "100"
ElseIf untype = "Medium" Then
Return price = "200"
ElseIf untype = "Large" Then
Return price = "300"
End If
End Function
如果有人能發現錯誤或某種約定缺陷,那就太棒了。我現在沒有選擇!
uj5u.com熱心網友回復:
calcpriceFunction有很多問題
首先,代碼將該函式宣告為回傳一個整數,但您嘗試回傳一個字串。這被編譯器接受,因為在您的專案選項中,您將Option Strict設定為 Off,這將啟用自動型別轉換(如果可能)。雖然這似乎是一件好事,但實際上這種自動轉換會產生很多問題,因為您永遠不知道何時出于任何原因它無法按預期作業。因此,首先將該選項更改為 Option Strict On。
然后有必要洗掉那個untype = ""因為它改變了引數中傳遞的值。
最后,不要在每個 if/else 陳述句中回傳,而只是設定價格值并僅使用一個最終回傳
Private Function calcpriceFunction(ByVal untype As String) As Integer
' Zero is the default, but I like to be explicit
Dim price As Integer = 0
If untype = "Small" Then
price = 100
ElseIf untype = "Medium" Then
price = 200
ElseIf untype = "Large" Then
price = 300
End If
Return price
End Function
此更改將從您的方法中洗掉許多退出點,但也會洗掉原始 return 陳述句中存在的另一個細微錯誤
Return price = "100"
不會將值“100”分配給變數 price 然后回傳它,而是要求編譯器回傳 price 的當前值與常量“100”之間的比較結果。或者換句話說。價格的當前值是否等于“100”?如果不回傳 0
uj5u.com熱心網友回復:
Private Function calculatePrice(untype As String) As Integer
If untype = "Small" Then Return 100
If untype = "Medium" Then Return 200
If untype = "Large" Then Return 300
Throw New ArgumentOutOfRangeException()
End Function
要盡早理解的一件事是,將整數和字串混為一談是非常糟糕的。"100"和100價值不一樣!此外,由于國際化/本地化和其他文化問題,在這些值之間來回轉換比您知道的要慢得多且容易出錯。這絕對是要盡可能避免的事情。
因此,當接受來自用戶的數字輸入時,當然必須以字串開頭,盡快轉換為類似integeror的數字型別,并盡可能長時間地保持這種狀態,僅在以下情況下再次將其轉換回字串您必須再次將其展示給用戶。Decimal
同樣的原則也適用于 DateTime 值。
uj5u.com熱心網友回復:
以下是對您的一些修改calcpriceFunction:
Private Function CalculatePrice(untype As String) As Integer
Select Case untype.ToLowerInvariant
Case "small"
Return 100
Case "medium"
Return 200
Case "large"
Return 300
Case Else
Return 0
End Select
End Function
除了史蒂夫在他的回答中提到的問題,我建議你讓函式的untype值不區分大小寫。If ... ElseIf ... ElseIf ... End If此外,為了Select Case便于閱讀,我將條件塊從更改為 。請注意,一旦您確定了價格,就可以直接回傳價格,就像在本示例中使用Return 100. 最后,我將函式重命名為CalculatePrice. 沒有理由縮寫名稱,并且您不應該Function在函式名稱中使用。
uj5u.com熱心網友回復:
我對我的按鈕點擊和功能進行了這些更改,我得到了我想要的結果!非常感謝大家的幫助。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim result As Integer
result = calcpriceFunction(cboUnitType.SelectedValue)
MessageBox.Show("The calculated price is: $" & result & " per month.")
End Sub
Private Function calcpriceFunction(ByVal untype As String) As Integer
Dim price As Integer = 0
If untype = "Small" Then
price = 100
ElseIf untype = "Medium" Then
price = 200
ElseIf untype = "Large" Then
price = 300
End If
Return price
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/476783.html
上一篇:.Net 6 WebApi 專案部署到 Linux 系統上的 Docker 容器
下一篇:提取大寫單詞直到第一個小寫字母
