这是一个很好的VB.Net编码语法吗?

时间:2012-10-01 16:48:05

标签: .net vb.net

我需要检查两个文本框textbox_price和textbox_quantity是否包含数值或根本没有值,如果,则给出特定的错误消息。 textbox_item仅允许使用非数字字符。目前使用以下OR的连接并且它有效,但我想知道这是否有效且良好。如您所见,检查很长且难以阅读。帮助赞赏。

If textbox_item.Text = "" Or textbox_price.Text = "" Or textbox_quantity.Text = "" Or          IsNumeric(textbox_price.Text) = False Or IsNumeric(textbox_quantity.Text) = False Or IsNumeric(textbox_item.Text) = True Then
        MsgBox("Please fill out every textbox with valid data", MsgBoxStyle.Information, "Invalid entry")
        textbox_price.Text = ""
        textbox_item.Text = ""
        textbox_quantity.Text = ""
        Exit Sub
    End If

3 个答案:

答案 0 :(得分:2)

仅查看If...Then语句的逻辑(而不是您希望执行的代码),我会将其更改为:

If textbox_item.Text = "" OrElse textbox_price.Text = "" OrElse textbox_quantity.Text = "" OrElse _
    IsNumeric(textbox_price.Text) = False OrElse IsNumeric(textbox_quantity.Text) = False OrElse IsNumeric(textbox_item.Text) = True Then
    'Code to execute goes here
End If

基本上,在每种情况下都要将Or更改为OrElse。这样,只要满足其中一个条件,就不会检查其他条件。

这是一篇简短的文章,解释了VB .NET中的OrElse

MSDN - OrElse Operator

答案 1 :(得分:2)

我希望看到一个很长的If..Then..ElseIf链,因此错误消息可以特定于问题。

If textbox_Item.Text = "" Then
    msgbox(errmsg1)
Elseif Not IsNumberic(textbox_Item.Text) Then
    msgbox(errmsg2)
Elseif ....

答案 2 :(得分:0)

您可能想要检查IsNumeric的实现在幕后的内容。在If块后我也会质疑你在做什么。如果您计划在检查后使用该值,则最好只使用Decimal.TryParse(或者您想要使用的数值tryparse)并在else子句中发送验证提示:

Dim price As Decimal
Dim quantity As Integer
Dim item as As Double

If Decimal.TryParse(textbox_price.text, price) 
   AndAlso Integer.TryParse(textbox_quantity.Text, quantity)
   AndAlso Double.TryParse(textbox_item.Text, item) Then
   '' Do something with the values
Else
   '' Send validation prompt
End If

此选项的优点是您没有解析值两次(IsNumeric和TryParse)。我记得,IsNumeric尝试解析,但只是抛出结果。如果您想要结果,请使用TryParse。 TryParse还处理空字符串和空字符串,因此您也不需要自己明确地进行这些测试。