VB.NET'Like'操作符可能存在错误?

时间:2012-06-10 19:43:20

标签: .net vb.net wildcard string-matching sql-like

为什么以下评估为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

1 个答案:

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