Visual Basic.Net中if语句中的一个奇怪的例子

时间:2012-10-31 13:22:23

标签: vb.net if-statement

A weird case in if clause in Visual Basic

我在这里检查是否 WebBrowserEx1.Document.All.Item(t).OuterHtml 等于 abc ,但尽管它们是相同的,它不接受它们相同,并且不执行if语句中的代码。盲人是我还是Visual Basic?

Big Pic:http://i.stack.imgur.com/hVjpH.png

编辑:

For t = 1 To WebBrowserEx1.Document.All.Count
    Dim abc = "<LI style=""PADDING-BOTTOM: 2px; PADDING-TOP: 2px"">Hata oluştu. İşlem tamamlanamamıştır. "
    If WebBrowserEx1.Document.All.Item(t).OuterHtml = abc Then
                        WebBrowserEx1.Navigate("http://uyg.sgk.gov.tr/vizite/tarihGiris.do")
       loc = "giris"
       WebBrowserEx1.Update()
       yeniSayfa = True

       Exit For
     End If
Next

观看中的WebBrowserEx1.Document.All.Item(t).OuterHtml的值: “Hataoluştu.İşlemtammlanamamıştır。”

观看abc的价值: “Hataoluştu.İşlemtammlanamamıştır。”

我认为大图应该更具说明性。

第二次尝试进行类型修正

For t = 1 To WebBrowserEx1.Document.All.Count
                    Dim abc As String
                    abc = "<LI style=""PADDING-BOTTOM: 2px; PADDING-TOP: 2px"">Hata oluştu. İşlem tamamlanamamıştır. "
                    If WebBrowserEx1.Document.All.Item(t).OuterHtml = abc Then
                        WebBrowserEx1.Navigate("http://uyg.sgk.gov.tr/vizite/tarihGiris.do")
                        loc = "giris"
                        WebBrowserEx1.Update()
                        yeniSayfa = True
                        Exit For
                    End If
                Next

4 个答案:

答案 0 :(得分:1)

请注意右列中每个对象的类型。由于abc变量的类型为&#34;对象&#34;,=运算符正在检查引用平等。 abc引用的对象可能是一个字符串,但由于该变量只是作为Object键入,因此您将获得引用比较。由于这两个对象不引用相同的内存块,因此比较返回False。将您的abc声明更改为:

Dim abc As String = "<LI ... "

要寻找的其他一些事情:

  • 任何空白区别都不会出现在调试/观察窗口中,这可能会破坏变量的显示值以适应空间。尝试点击放大镜仔细查看。
  • 我看到一些非ascii字符。确保您使用完全相同的unicode代码点,否则比较可能会失败。

答案 1 :(得分:1)

测试两个字符串的Len()。如果它们不同,那就有一些空白问题。

否则(或者无论如何要找出差异开始的地方)逐个字符地检查,直到找到差异为止。

答案 2 :(得分:1)

尝试规范化字符串。它们可能看起来相同但具有不同的Unicode表示

If WebBrowserEx1.Document.All.Item(t).OuterHtml.Normalize() = abc.Normalize() Then
    ...
End If

(并将abc键入为String,正如其他人已经指出的那样。似乎VB类型推断不如C#类型推断那么好。)

答案 3 :(得分:-1)

尝试将abc视为String

dim abc as string

或......

OuterHTML = cstr(abc)

我想问题在于将ObjectString进行比较。