'如果'声明没有返回它的意思

时间:2012-03-22 19:57:50

标签: vb.net if-statement not-operator

我只是失明或者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,它将“Not”等于其中任何一个并因此显示消息框。

为什么它会进入if声明?

6 个答案:

答案 0 :(得分:5)

当且仅当至少有一个给定条件为真时,

cond1 Or cond2 Or ... Or condn才为真。在你的情况下,至少有一个条件是真实的(事实上至少有两个条件在每种情况下都是真的)。例如,如果textSample"D",那么条件Not textSample = "E"和条件Not textSample = "F"将为真。所以整个条件都是真的。

长话短说:使用而不是或。

答案 1 :(得分:3)

表现正常。 True Or True Or False = True

我相信你想要的是

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

If Not tBadLetters.COntains(txtSample)
  MsgBox("blah")
End If

答案 2 :(得分:2)

textSample的值没有if条件可能为false。我想你想要这个:

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

如果您没有看到差异,请检查the truth tables for both versions

答案 3 :(得分: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

这应该有效。

答案 4 :(得分: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)

...     if(true)或(true)或(false)

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

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

答案 5 :(得分:0)

我个人会这样写:

Dim textSample As String = "F"

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

如果你像我一样喜欢使用.NET的可链接性,我还为自己编写了几个String Extensions,用于这样的案例:

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