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 が文字の 1 つであっても、メッセージ ボックスが表示されます。私の目には、そのifステートメントは textSample がこれらの文字の 1 つであることを確認してスキップする必要がありますが、Z の場合はそれらのいずれとも「等しくない」ため、メッセージ ボックスが表示されます。

なぜif声明に踏み込むのですか?

4

6 に答える 6

5

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

簡単に言うと、Or の代わりに And を使用します。

于 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

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 に答える
2

if 条件が false になる可能性がある textSample の値はありません。代わりにこれが欲しいと思います:

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

違いがわからない場合は、両方のバージョンの真理値表を調べてください。

于 2012-03-22T20:02:57.900 に答える
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 に答える
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」に等しい場合を除く)。

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

于 2012-03-22T20:04:51.970 に答える