2012-03-22 6 views
0

私はただブラインドであるか、これをしていますか?if声明は真の意味ではありませんか?'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が文字の1つであっても、メッセージボックスを表示します。私の目では、ifステートメントは、textSampleがそれらの文字の1つであり、スキップしているのを見るべきですが、Zならば、それらのいずれかと同じではないので、メッセージボックスを表示します。

なぜifのステートメントに入りますか?

+1

を、あなたがしたい場合があります[ロバートの答えと私の人物が実際に同じである理由](http://en.wikipedia.org/wiki/De_Morgan%27s_laws)。 –

答えて

5

cond1 Or cond2 Or ... Or condnは、指定された条件の少なくとも1つが真である場合にのみ真となります。あなたのケースでは、少なくとも1つの条件が真である場合が常に存在します(事実上少なくとも2つの条件が真である)。たとえば、textSample"D"の場合、条件Not textSample = "E"と条件Not textSample = "F"がtrueになります。したがって、条件全体が真となります。

ロングストーリー:Orの代わりにAndを使用します。

2

if条件がfalseになる可能性のあるtextSampleの値はありません。 the truth tables for both versionsを調べて、あなたは違いが表示されない場合

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

:私はあなたの代わりにこれをしたいと思います。

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 

3

正常に動作しています。 True Or True Or False = True

私はあなたが何をしたいと考えてい

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

If Not tBadLetters.COntains(txtSample) 
    MsgBox("blah") 
End If 
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真ではありません(true)か(true)か(false)を場合...(あなたのtextSampleが "D"と等しく、 "E"に等しく、 "F"に等しい場合を除く)

"or"を "and"に変更したいと思います。

0

私は個人的にはそうのようにそれを記述します。

Dim textSample As String = "F" 

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

あなたは、私のように、のchainabilityを使用したい場合。NETは、私も自分のために、このようなケースのためのいくつかの文字列の拡張を書いた:私はそのようにのようなあなたのIf文を書くことができた場所に

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 

:自分がより良い理解を助けるために

Dim textSample As String = "F" 

If textSample.IsNotEqualToAny("D", "E", "F") Then 
    MessageBox.Show("False") 
End If 
関連する問題