在VB.NET中比较控制台行与字符串

时间:2013-12-16 18:09:18

标签: vb.net

我正在使用我的第一个VB.NET控制台应用程序,而且我很难处理(可能)非常简单的概念。我需要将用户键入的内容与一系列字符串进行比较。

这是我到目前为止所做的:

    Console.WriteLine("Is there a 2nd IIS Server? (y/n)")
    If Console.ReadLine() = "Yes" Or "yes" Or "Y" Or "y" Then
        Servers.IISsvr2 = Console.ReadLine()
    End If

我知道=运算符在这里不正确,因为那是布尔值。我应该检查一系列布尔检查吗?或者有更好的方法来处理这种情况吗?

3 个答案:

答案 0 :(得分:5)

=运算符完全正确;这是你的Or操作数的其余部分错了!

这是人们在每种语言中犯下的一个非常常见的错误,而事实是,它只是不起作用。编程语言并不神奇。 Or接受一个操作数和另一个操作数并返回布尔值或整数。它的优先级低于=。您必须每次都指定比较,否则它将始终为True

Console.WriteLine("Is there a 2nd IIS Server? (y/n)")
Dim line As String = Console.ReadLine()

If line = "Yes" Or line = "yes" Or line = "Y" Or line = "y" Then
    Servers.IISsvr2 = Console.ReadLine()
End If

另外,使用OrElse来防止不必要的比较(当操作数是布尔值时,它几乎总是你想要的):

Console.WriteLine("Is there a 2nd IIS Server? (y/n)")
Dim line As String = Console.ReadLine()

If line = "Yes" OrElse line = "yes" OrElse line = "Y" OrElse line = "y" Then
    Servers.IISsvr2 = Console.ReadLine()
End If
在某些情况下

Select Case也很有趣,但这可能不合适

Select Case Console.ReadLine()
    Case "Yes", "yes", "Y", "y"
        Servers.IISsvr2 = Console.ReadLine()
End Select

提示,有人吗?

Function BooleanPrompt(prompt As String) As Boolean
    Do
        Console.Write("{0} (y/n) ", prompt)

        Select Case Console.ReadLine().ToLower()
            Case "y", "yes"
                Return True
            Case "n", "no"
                Return False
        End Select
    Loop
End Function

答案 1 :(得分:1)

您需要将读取行捕获到变量中,然后测试该变量:

Console.WriteLine("Is there a 2nd IIS Server? (y/n)")
Dim str as string =  Console.ReadLine()
If str.ToUpper() = "YES" Or str.ToUpper() = "Y" Then
    Servers.IISsvr2 = Console.ReadLine()
End If

答案 2 :(得分:0)

你也可以这样做:

If {"Yes","yes","Y","y"}.Contains(Console.ReadLine()) Then

如果yes有很多选项,我建议您使用HashSet(Of String),其中这些值会预先填充,然后对其进行Contains