10

以下が と評価されるのはなぜTrueですか?

Dim result = "b" Like "*a*b"

ありがとう。

編集:
これを少し一般化するために、次の戻り値True:

"String1" Like "*AnyText1*AnyText2*AnyText???******????*String1"

VBA は正常に動作し、 を返しFalseます。
PowerShell は正しく動作し、以下を返しFalseます。

PS C:\Users\XXX> "b" -Like "*a*b"
False

EDIT2:
バグ レポートへのリンク:
https://connect.microsoft.com/VisualStudio/feedback/details/748415/a-bug-in-net-like-operator

4

1 に答える 1

6

私は楽しみのために、ilspyを開いてこれをデバッグすることにしました:-)

この方法では;

    private static void MatchAsterisk(string Source, int SourceLength, int SourceIndex, LigatureInfo[] SourceLigatureInfo, string Pattern, int PatternLength, int PatternIndex, LigatureInfo[] PattternLigatureInfo, ref bool Mismatch, ref bool PatternError, CompareInfo Comparer, CompareOptions Options)

この条件のために

                if (SourceLength <= 0)
                {
                    return;
                }

に変更することで

                if (SourceLength < 0)
                {
                    return;
                }

意図したとおりに機能するようです

私はいくつかの小さなテストを行っただけで、大きなことは何もしていません

問題は次のとおりです。最後のアスタリスクだけを見ていて、それが有効だったときはそこで止まっていました

私の小さな変更は、前のもの、またはそれより前の実際のものを確認してください

私の修正で

 Dim result = "b" Like "*a*b"
 now return false

 "String1" Like "*AnyText1*AnyText2*AnyText???******????*String1"
 now return false

ただし、true を返す必要がある場合は true を返します

于 2012-06-12T01:43:32.890 に答える