簡體   English   中英

Visual Basic while循環語法

[英]Visual Basic while loop syntax

我在下面的代碼中苦苦掙扎:

    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)

嚴格啟用Option,您將看到正在發生的事情。 在VB中,=運算符既是賦值運算符又是比較。 一段時間使用時,它將比較值並返回true或false。 然后,它將嘗試對布爾值(不是值)進行大於0的操作。

簡而言之

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

會做:BytesRead等於reader.Read(Buffer,0,Buffer.Length)嗎? 此布爾值是否大於0。

我認為這段代碼可以在C#中使用,因為它具有=和==。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM