Vb.net 验证数据输入

Vb.net 验证数据输入,vb.net,validation,Vb.net,Validation,这似乎是一种验证数据输入的糟糕方法。我发现自己做了很多事情。有没有办法合并或简化这些程序 副标题() 下面是两个看起来过于复杂的潜艇: Sub IsNumeric(ByRef Variable As Integer) While True Try Variable = CInt(Console.ReadLine()) Exit While Catch Console.Writ

这似乎是一种验证数据输入的糟糕方法。我发现自己做了很多事情。有没有办法合并或简化这些程序

副标题()

下面是两个看起来过于复杂的潜艇:

    Sub IsNumeric(ByRef Variable As Integer)
    While True
        Try
            Variable = CInt(Console.ReadLine())
            Exit While
        Catch
            Console.WriteLine("Error: Please enter a number:")
        End Try
    End While
End Sub
Sub Validate(ByVal Variable As Integer, ByVal LandscapeSize As Integer)
    Dim Size As Integer
    Size = (LandscapeSize * LandscapeSize)
    While Variable <= 0 Or Variable >= Size
        Console.WriteLine("Error: Please enter a number:")
        While True
            Try
                Variable = CInt(Console.ReadLine())
                Exit While
            Catch
                Console.WriteLine("Error: Please enter a number:")
            End Try
        End While
    End While
End Sub
Sub-IsNumeric(ByRef变量为整数)
虽然是真的
尝试
变量=CInt(Console.ReadLine())
退出时
抓住
Console.WriteLine(“错误:请输入一个数字:”)
结束尝试
结束时
端接头
子验证(ByVal变量为整数,ByVal LandscapeSize为整数)
将大小设置为整数
大小=(景观大小*景观大小)
而变量=大小
Console.WriteLine(“错误:请输入一个数字:”)
虽然是真的
尝试
变量=CInt(Console.ReadLine())
退出时
抓住
Console.WriteLine(“错误:请输入一个数字:”)
结束尝试
结束时
结束时
端接头
非常感谢

因此请重命名IsNumeric。。 改用TryParse摆脱try-catch

Sub ReadNumber(ByRef Variable As Integer)
  Do
      If Integer.TryParse(Console.ReadLine(), variable) Then Exit Sub
      Console.WriteLine("Error: Please enter a number:")
  Loop
End Sub

Sub Validate(ByVal Variable As Integer, ByVal LandscapeSize As Integer)
    Dim Size As Integer = LandscapeSize * LandscapeSize
    While Variable <= 0 Or Variable >= Size
        Console.WriteLine("Error: Please enter a number:")
        do
            If Integer.TryParse(Console.ReadLine(), variable) Then Exit Do
            Console.WriteLine("Error: Please enter a number:")
        loop
    End While
End Sub
Sub ReadNumber(ByRef变量为整数)
做
如果是Integer.TryParse(Console.ReadLine(),变量),则退出Sub
Console.WriteLine(“错误:请输入一个数字:”)
环
端接头
子验证(ByVal变量为整数,ByVal LandscapeSize为整数)
尺寸为整数=景观尺寸*景观尺寸
而变量=大小
Console.WriteLine(“错误:请输入一个数字:”)
做
如果是Integer.TryParse(Console.ReadLine(),变量),则退出Do
Console.WriteLine(“错误:请输入一个数字:”)
环
结束时
端接头

然而。。我猜您真的希望验证中的第一个变量是ByRef而不是ByVal。

我看不出有多少可以更改的地方。。。也许你可以组合几行,但对你没有任何帮助。不要使用名称IsNumeric。。这是一个保留的系统函数名。2.使用try/catch捕获非数字不是最好的方法。错误处理有很大的开销。你最好读一个字符串,然后用系统函数IsNumeric()测试它。@Trevor某种程度上,我很高兴你这么说。有两个try-catch语句似乎很费劲。非常感谢。编辑-所以声明为字符串并使用IsNumeric..听起来更好…使用Integer.TryParse.我投票关闭这个问题,因为它要求审查
是否有一种方法可以组合或简化这些过程
,当然有,但本网站不适合这样做。是你需要参观的地方…我非常感激。TryParse似乎是一种更有效的方法。非常感谢。
Sub ReadNumber(ByRef Variable As Integer)
  Do
      If Integer.TryParse(Console.ReadLine(), variable) Then Exit Sub
      Console.WriteLine("Error: Please enter a number:")
  Loop
End Sub

Sub Validate(ByVal Variable As Integer, ByVal LandscapeSize As Integer)
    Dim Size As Integer = LandscapeSize * LandscapeSize
    While Variable <= 0 Or Variable >= Size
        Console.WriteLine("Error: Please enter a number:")
        do
            If Integer.TryParse(Console.ReadLine(), variable) Then Exit Do
            Console.WriteLine("Error: Please enter a number:")
        loop
    End While
End Sub