我正在使用我的第一个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
我知道=运算符在这里不正确,因为那是布尔值。我应该检查一系列布尔检查吗?或者有更好的方法来处理这种情况吗?
答案 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
。