2012-03-22 7 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이 문자 중 하나 인 경우에도 메시지 상자가 표시됩니다. 내 눈에서 그 if 성명을 그 textSample 해당 문자 중 하나를 건너 뛰는 것을 볼 수 있지만 Z 경우 "아닙니다"그 중 하나와 같게 따라서 메시지 상자를 표시합니다.

if 문을 사용합니까?

+1

자신을 더 잘 이해하기 위해, 당신이 할 수 있습니다 [로버트의 대답과 내 이유가 실제로 같은 이유] (http://en.wikipedia.org/wiki/De_Morgan%27s_laws). –

답변

5

cond1 Or cond2 Or ... Or condn은 주어진 조건 중 하나 이상이 참인 경우에만 true입니다. 귀하의 경우에는 적어도 하나의 조건이 사실 인 경우가 항상 있습니다 (실제로 두 가지 조건 중 적어도 두 가지가 사실 일 것입니다). 예를 들어, textSample"D"이면 조건 ​​Not textSample = "E"과 조건 Not textSample = "F"이 참입니다. 그래서 모든 조건이 사실이 될 것입니다.

짧은 이야기 : 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"와 같을 경우 제외).

"또는"을 "and"로 변경하고 싶습니다.

0

나는 개인적으로 이렇게처럼 작성합니다

Dim textSample As String = "F" 

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

당신이 나처럼,의 chainability을 사용하고자합니다.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 

명세서과 같이하는 경우 :

Dim textSample As String = "F" 

If textSample.IsNotEqualToAny("D", "E", "F") Then 
    MessageBox.Show("False") 
End If