Visual Basic-新手问题-无法将用户输入分配给类属性

时间:2019-01-22 06:23:37

标签: vb.net

我正在尝试接受用户输入并将其分配给类中定义的属性。当我运行该程序时,它会按预期要求用户输入,但显示不同的结果。有人可以指出我的错误在哪里吗?

我试图将本程序作为本教程的基础 https://docs.microsoft.com/en-us/dotnet/core/tutorials/vb-with-visual-studio 但尝试将其扩展到类。

我正在使用Visual Studio和Visual Basic的最新版本。这是一个可视的基本控制台应用程序

Module Module1

    Sub Main()
        Dim ClassInstance As New Class1()
        Console.WriteLine("Input Property 1: ")
        ClassInstance.Property1 = Console.Read()
        Console.Write(ClassInstance.Property1)
        Console.ReadKey(True)

    End Sub

    Public Class Class1
        Public Property1 As Integer
        Public Property2 As Integer
    End Class

End Module

预期输出:

  

“输入属性1:” |   用户输入50 |   输出50

1 个答案:

答案 0 :(得分:2)

Console.Read从输入中读取下一个字符,并为您提供该字符的代码。例如,如果您在提示符 1 上键入5,则Console.Read将返回53。为什么?因为那是该字符的ASCII / Unicode代码(用Unicode术语来说,它是U + 0035,与用十六进制表示的数字相同)。

如果您想读取多个字符并将其解释为整数,则应a)使用Console.Read以外的其他字符作为输入,b)使用{{3} }尝试将其转换为数字(因为用户并不总是向我们提供我们期望的输入)。

类似的东西:

Module Module1

    Sub Main()
        Dim ClassInstance As New Class1()
        Console.WriteLine("Input Property 1: ")
        Dim inp = Console.ReadLine()
        Dim value as Int32
        If Int32.TryParse(inp, value) Then
          ClassInstance.Property1 = value
          Console.Write(ClassInstance.Property1)
          Console.ReadKey(True)
        End If
    End Sub

    Public Class Class1
        Public Property1 As Integer
        Public Property2 As Integer
    End Class

End Module

(如果我犯了语法错误,我深表歉意-我的VB很生锈)

实际上,您可能希望编写某种形式的循环来提示用户输入,并且直到成功解析后才终止。我认为Do / While会适合那里-但如果要多次提示用户,则可能希望将“循环直到收到有效输入”代码提取到一个函数中将提示作为参数。

更多阅读-Int32.TryParse / ASCII。对于“ 7位ASCII”范围内的字符(无重音的基本拉丁字符),您检查的引用没有太大区别


1 无论您继续输入什么字符都没关系,您的程序只要求/得到其中一个