当前位置:编程学习 > C#/ASP.NET >>

vb2005的严重bug

"abc" like "ab*abc" 的结果应该是false,在vb6.0里也的确返回false,但在vb2005里却返回true,还有类似的字符串比较都是如此,请教这是不是vb2005的bug?如果vb2005连这样简单的运算也会出错,那用他做的软件用起来也太不放心了吧! --------------------编程问答--------------------
引用楼主 qpzm1qpzm 的回复:
"abc" like "ab*abc" 的结果应该是false,在vb6.0里也的确返回false,但在vb2005里却返回true,还有类似的字符串比较都是如此,请教这是不是vb2005的bug?如果vb2005连这样简单的运算也会出错,那用他做的软件用起来也太不放心了吧!


不是Bug,而是.net里面like运算符可以使用通配符,*,?(好像还有)等都是通配符 --------------------编程问答-------------------- 本来就是嘛,*是通配符啊。。。。老大。。。。。 --------------------编程问答-------------------- 这个BUG确实够大啊。。。。。。 --------------------编程问答--------------------
引用楼主 qpzm1qpzm 的回复:
"abc" like "ab*abc" 的结果应该是false,在vb6.0里也的确返回false,但在vb2005里却返回true,还有类似的字符串比较都是如此,请教这是不是vb2005的bug?如果vb2005连这样简单的运算也会出错,那用他做的软件用起来也太不放心了吧!

请不要把vb6和vb.net看成一门语言,请从新学习vb.net,就当不懂vb --------------------编程问答-------------------- vb6里的*也是通配符,一样的.就算vb6和vb.net不一样,"abc" like "*abc"返回true是没有问题的,但无论如何"abc" like "ab*abc"的结果也不应该是true!就像1+1的结果不会是3一样,这很可能是算错了,是bug! --------------------编程问答-------------------- 在VB.NET2003和VB.NET2008测试LZ的命题并未出现LZ的结论. --------------------编程问答--------------------
引用 6 楼 zdingyun 的回复:
在VB.NET2003和VB.NET2008测试LZ的命题并未出现LZ的结论.


VB.NET2008测试LZ的命题出现LZ的结果.

--------------------编程问答-------------------- VB6.0与VB.NET2005测试LZ的命题出现LZ的结果. --------------------编程问答-------------------- 把你的测试代码上上来 --------------------编程问答-------------------- VB.NET2008中:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = "abc" Like "ab*abc"
    End Sub

TextBox1.Text中显示True
VB.NET2003中:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        TextBox1.Text = "abc" Like "ab*abc"
    End Sub

TextBox1.Text中显示False --------------------编程问答-------------------- 感觉上。赞同楼主。是有点不对。vb2008,2010中并没有对Like做另外的说明,那应该是和vb6的表达意思是一样的,但好像解释方法有点不同。 --------------------编程问答-------------------- 为什么要用Like,而不用Regex呢?Regex准确而强大,VB.net与vb6已经不是一种语言了,象取消了set,默认传址改为传值等,两者写出来的代码是不兼容的。Like的定义也可能改写过了,所以最好看看当前版本文档的解释。
--------------------编程问答-------------------- 学习!!! --------------------编程问答--------------------

'VB2010测试代码
    Sub Main()
        Dim i As Boolean = "abc" Like "ab*abc"
        Dim j As Boolean = "ab*abc" Like "abc"
        Dim a As Integer = 2
        Console.WriteLine(i.ToString + " " + j.ToString)
        Console.ReadLine()
    End Sub
    '结果是:True False
--------------------编程问答--------------------

'VB6测试代码
Private Sub Command1_Click()
 Text1.Text = Str("abc" Like "ab*abc") + " " + Str("ab*abc" Like "abc")
End Sub
'结果是:False False



'VB2008 和 VB2010测试代码
    Sub Main()
        Dim i As Boolean = "abc" Like "ab*abc"
        Dim j As Boolean = "ab*abc" Like "abc"
        Console.WriteLine(i.ToString + " " + j.ToString)
        Console.ReadLine()
    End Sub
    '结果是:True False


但不能认为是BUG,只是对Like的定义不一样了而已。 --------------------编程问答-------------------- --------------------编程问答-------------------- "ab*abc"里有"abc",
"abc" like "ab*abc"当然是true了,有啥疑问的? --------------------编程问答-------------------- *是通配符 --------------------编程问答--------------------
引用 5 楼 qpzm1qpzm 的回复:
vb6里的*也是通配符,一样的.就算vb6和vb.net不一样,"abc" like "*abc"返回true是没有问题的,但无论如何"abc" like "ab*abc"的结果也不应该是true!就像1+1的结果不会是3一样,这很可能是算错了,是bug!


冇认真睇清楚,按理是返回False的,VB.NET2003也是返回False,不知道2008怎么解析的 --------------------编程问答--------------------
引用 17 楼 gxingmin 的回复:
"ab*abc"里有"abc",
"abc" like "ab*abc"当然是true了,有啥疑问的?


在认真想想,呵呵
在VB.NET2003里测试不管是"abc" Like "ab*abc" 还是 "ab*abc" Like "abc"
都是防火False的
--------------------编程问答--------------------
引用 17 楼 gxingmin 的回复:
"ab*abc"里有"abc",
"abc" like "ab*abc"当然是true了,有啥疑问的?


同意这个看法,这应该是Like的最新定义。 --------------------编程问答--------------------
引用 17 楼 gxingmin 的回复:
"ab*abc"里有"abc",
"abc" like "ab*abc"当然是true了,有啥疑问的?


刚开始也认为这样,似乎又不对,如:"a" like "aaa"
"aaa"里有a,但返回的是false.

测试VB2005。 --------------------编程问答-------------------- 又没搜到官方说明。所以还是赞同LZ的观点…… --------------------编程问答--------------------
引用 1 楼 allanli 的回复:
引用楼主 qpzm1qpzm 的回复:
"abc" like "ab*abc" 的结果应该是false,在vb6.0里也的确返回false,但在vb2005里却返回true,还有类似的字符串比较都是如此,请教这是不是vb2005的bug?如果vb2005连这样简单的运算也会出错,那用他做的软件用起来也太不放心了吧!


不是Bug,而是.net里面like运算符可以使用通配符,*,?(好像……


           ~顶 --------------------编程问答-------------------- 试了一下,确实诡异,支持一下楼主。 --------------------编程问答-------------------- 确实不一样,不过个人感觉返回true的应该算比较正确的吧,返回true才和sql中的模糊查询相一致吧 --------------------编程问答-------------------- 其实反过来思考下,又何尝不是vb6.0的一个bug呢,只不过在vs2005把它修正了 --------------------编程问答--------------------
引用 26 楼 myhope88 的回复:
确实不一样,不过个人感觉返回true的应该算比较正确的吧,返回true才和sql中的模糊查询相一致吧


SQL Server 2000 'abc' Like 'ab*abc','ab*abc' Like 'abc' 都是防火False的

大家都和我一样被第一感觉误导了,首先大家需要明白的是like 运算符的定义
result = string Like pattern
我的理解是string 是否含有pattern,也就是pattern是否是string的一部分

第一个表达式"abc" Like "ab*abc",按理应该是返回False的,因为"ab*abc"怎会会是"abc"的一部分呢,
应该相反是"abc"是"ab*abc"的一部分
那么按理第二个表达式"ab*abc" Like "abc"是返回True的,但like运算符是有边界定义的,
要返回Ture必须是"ab*abc" Like "*abc" 或者 "ab*abc" Like "*abc*"


--------------------编程问答-------------------- mark!! --------------------编程问答--------------------
引用 27 楼 myhope88 的回复:
其实反过来思考下,又何尝不是vb6.0的一个bug呢,只不过在vs2005把它修正了

此言极是 --------------------编程问答-------------------- 感觉.net对like有一个新的定义,期待高手来解答这个问题,
否则我也认为这是一个BUG。 --------------------编程问答-------------------- 或者.net对通配符*在like中的解释有问题。 --------------------编程问答-------------------- 学习,帮顶 --------------------编程问答-------------------- 学习了。 --------------------编程问答-------------------- 反正这里面总有一个是bug --------------------编程问答-------------------- 若有更新的话应该在what's new里声明的,我并没有找到这一类的声明,看来的确是bug? --------------------编程问答-------------------- 我的感觉应该是都是false的,像vb6的结果一样. --------------------编程问答-------------------- 很诡异,不知道怎么回事,先mark,等高人解释 --------------------编程问答-------------------- 学习了 这个应该说明解释一下 --------------------编程问答--------------------
引用 27 楼 myhope88 的回复:
其实反过来思考下,又何尝不是vb6.0的一个bug呢,只不过在vs2005把它修正了


估计27楼说对了,或者也能说是Like的新定义,因为连vs2010都是显示true --------------------编程问答-------------------- 微软天天就弄这些东西。我就不记得gcc有这样的毛病。 --------------------编程问答-------------------- --------------------编程问答-------------------- 这么多人说“*”是通配符,那为什么“?”又不能作通配符。这有点矛盾。
在VB2005中,"abc" like "ab?abc",返回的结果是 FALSE。
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,