Visual Basic while循环语法

时间:2018-07-12 13:56:37

标签: .net vb.net

我在下面的代码中苦苦挣扎:

    Dim req = WebRequest.Create(Uri)
    Dim resp = req.GetResponse()
    Dim stream As Stream = resp.GetResponseStream()

    Dim Buffer As Byte() = New Byte(1023) {}
    Dim MemStream As New MemoryStream()
    Dim BytesRead As Integer = 0
    Dim totalBytesRead As Long = 0

    Dim reader As New BinaryReader(stream)

    While ((BytesRead = reader.Read(Buffer, 0, Buffer.Length)) > 0)
        BytesRead = reader.Read(Buffer, 0, Buffer.Length)
        MemStream.Write(Buffer, 0, BytesRead)
        totalBytesRead += BytesRead
    End While

尽管阅读器中有可用数据,但从未输入while循环。从未设置变量BytesRead,这使我认为它将把“ BytesRead = reader.Read(...)”视为相等验证器。但是没有运气,因为我在调试模式下试图将BytesRead变量更改为1024(缓冲区的长度(最大读取值)),但是结果相同。

我解决了这个问题,将while循环更改为以下“ do-while”循环:

    Do
        BytesRead = reader.Read(Buffer, 0, Buffer.Length)
        MemStream.Write(Buffer, 0, BytesRead)
        totalBytesRead += BytesRead
    Loop While BytesRead > 0

我的问题去了;为什么while循环无法按我的预期工作?:

((BytesRead = reader.Read(Buffer, 0, Buffer.Length)) > 0) => ((output) > 0)

1 个答案:

答案 0 :(得分:2)

严格启用选项,您将看到正在发生的事情。在VB中,=运算符既是赋值运算符又是比较。一段时间使用时,它将比较值并返回true或false。然后,它将尝试对布尔值(不是值)进行大于0的操作。

简而言之

While ((BytesRead = reader.Read(Buffer, 0, Buffer.Length)) > 0)

会做:BytesRead是否等于reader.Read(Buffer,0,Buffer.Length)?此布尔值是否大于0。

我认为这段代码可以在C#上使用,因为它具有=和==。