0

我只是瞎了眼还是这个if陈述真的没有达到它的意思?

Dim textSample as String = "F"
If Not textSample = "D" Or Not textSample = "E" Or Not textSample = "F" Then
    MessageBox.Show("False")
End If

即使 textSample 是其中一个字母,也会显示消息框。在我看来,该if语句应该看到 textSample 是其中一个字母并跳过它,而如果它是 Z ,它将“不”等于其中任何一个,因此会显示消息框。

为什么要进入if声明?

4

6 回答 6

5

cond1 Or cond2 Or ... Or condn当且仅当至少一个给定条件为真时为真。在您的情况下,总是至少有一个条件为真(实际上在每种情况下至少有两个条件为真)。例如 if textSampleis "D"then 条件Not textSample = "E"并且条件Not textSample = "F"为真。所以整个条件都是真的。

长话短说:使用 And 而不是 Or。

于 2012-03-22T20:03:31.663 回答
3

它正在正常运行。 True Or True Or False = True

我相信你想要的是

Dim tBadLetters() As String = {"D", "E", "F"}

If Not tBadLetters.COntains(txtSample)
  MsgBox("blah")
End If
于 2012-03-22T20:04:50.833 回答
2

您的 if 条件可能为假的 textSample 没有任何值。我想你想要这个:

If Not (textSample = "D" Or textSample = "E" Or textSample = "F") Then 
   MessageBox.Show("False")

如果您没有看到差异,请检查两个版本的真值表

于 2012-03-22T20:02:57.900 回答
2

这是因为您使用 OR 子句,您需要使用 AND。基本上你说如果 textSample 不是 D 然后显示你的消息框。

将其更改为:

Dim textSample as String = "F"
If Not textSample = "D" AND Not textSample = "E" AND Not textSample = "F" Then
   MessageBox.Show("False")
End If

那应该行得通。

于 2012-03-22T20:04:18.490 回答
0

该消息将始终显示。这就是为什么。在您的示例中,让我们说 textSample = "F"。然后

if Not F equals D  Or  Not F equals E  or Not F equals F

所以让我们总结一下:

if (F not equals D ) or ( F not equals E ) or ( F not equals F)

...如果(真)或(真)或(假)

因此,无论 textSample 是什么,您的条件都是正确的......(除非您的 textSample 可以同时等于“D”并且等于“E”并且等于“F”)。

我认为您想将“或”更改为“和”。

于 2012-03-22T20:04:51.970 回答
0

我个人会这样写:

Dim textSample As String = "F"

If textSample <> "D" AndAlso textSample <> "E" AndAlso textSample <> "F" Then
   MessageBox.Show("False")
End If

如果您像我一样喜欢使用 .NET 的可链接性,我还为自己编写了几个字符串扩展,用于以下情况:

Public Module StringExtensions

    <Extension()> _
    Public Function IsNullOrBlank(ByVal s As String) As Boolean
        Return s Is Nothing OrElse s.Trim.Length.Equals(0)
    End Function

    <Extension()> _
    Public Function IsNotNullOrBlank(ByVal s As String) As Boolean
        Return s IsNot Nothing AndAlso s.Trim.Length > 0
    End Function

    <Extension()> _
    Public Function IsEqualToAny(ByVal s As String, ByVal ParamArray values As String()) As Boolean
        If s.IsNotNullOrBlank AndAlso values.Length > 0 Then
            For Each value As String In values
                If s = value Then Return True
            Next
        End If

        Return False
    End Function

    <Extension()> _
    Public Function IsNotEqualToAny(ByVal s As String, ByVal ParamArray values As String()) As Boolean
        If s.IsNotNullOrBlank AndAlso values.Length > 0 Then
            For Each value As String In values
                If s = value Then Return False
            Next
        End If

        Return True
    End Function

End Module

然后我可以像这样写你的 If 语句:

Dim textSample As String = "F"

If textSample.IsNotEqualToAny("D", "E", "F") Then
   MessageBox.Show("False")
End If
于 2012-03-22T20:07:18.910 回答