.net - Visual Basic while 循环语法
问题描述
我在下面的代码中挣扎:
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 Strict On,你会看到发生了什么。在 VB 中,= 运算符既是赋值运算符又是比较运算符。当使用一段时间时,它将比较两个值并返回真或假。然后它会尝试对布尔值(不是值)执行 > 0。
简而言之
While ((BytesRead = reader.Read(Buffer, 0, Buffer.Length)) > 0)
会做: BytesRead 是否等于 reader.Read(Buffer, 0, Buffer.Length) ?这个布尔值是否大于 0。
我认为这段代码可以在 C# 中运行,因为它有 = 和 ==。
推荐阅读
- javascript - 为什么 Cloud Firestore 的 where 功能不起作用
- anaconda - 我不断得到 ResolvePackageNotFound
- java - 检查方法参数是否为子类型失败
- java - PDF 文件生成。爪哇
- javascript - 自定义 SweetAlert 按钮的问题
- git - 为什么拉子分支会覆盖父分支上的更改?
- android - 调用 SmoothScrollTo(0, 0) 时如何停止 NestedScrollView 滚动
- javascript - 用 JavaScript 替换多个 HTML DOM 元素中的多个类?
- amazon-web-services - 在本地运行现有的 AWS Lambda
- sql - 来自父子层次结构的平面表