为什么不以同样的方式处理所有这些变量?

2024-01-17

我正在检查 VB.NET 中变量声明的位置并不重要,除了范围之外(对于这个问题 https://stackoverflow.com/q/13259999/256431),我想我最好检查一下当它们被“提升”到闭包时会发生什么。我还没有阅读规范,但我无法解释这些结果:

Dim outer As Integer
For i = 1 To 2
 Dim inner As Integer
 Try
  Dim inner2 As Integer
  Do
   Dim inner3 As Integer
   Call Sub()
    Dim inner4 As Integer
    Console.WriteLine(outer & ", " & inner & ", " & inner2 & ", " & inner3 & ", " & inner4)
    outer = i
    inner = i
    inner2 = i
    inner3 = i
    inner4 = i
   End Sub()
  Loop Until True
 Finally
 End Try
Next

以上输出:

0, 0, 0, 0, 0
1, 1, 0, 1, 0

inner4每次重置都是有意义的,其他全部或都不重置也是有意义的innerX,但为什么只有inner2?!


来自 MSDN(重点是我的):

[...]编译器的基本作用是,当它进入包含提升变量的新作用域时,编译器将检查闭包实例是否已存在;如果是这样,编译器将创建一个新的闭包实例,并重置前一个闭包中的变量值。

注意编译器只做上面的检查如果它在生成闭包的函数中检测到循环或 GoTo.

Link http://msdn.microsoft.com/en-us/library/bb981314%28VS.80%29.aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么不以同样的方式处理所有这些变量? 的相关文章

  • 用户完成后关闭 Excel

    任务非常简单 我想从 VB net GUI 打开 Excel 文档 xls 用户将处理 Excel 文件 用户完成后关闭 Excel 文件 我想要VB net代码释放Excel对象 问题是 当用户关闭文件时 Excel 对象仍然可以在任务管
  • 如何在 VB.NET 中将 DataGridView 导出为 Excel 格式

    我使用 OLE 通过 VB NET 连接到数据库 并在 DataGridView 中显示结果 我想将 DataGridView 中的数据导出到 Excel 格式文件 即用户可以将 DataGridView 的内容保存为 MS Excel 文
  • 带分页的自定义数据表

    我正在使用我的自定义DataTable as a DataSource to my ListView 现在 我面临的问题是Paging不管用 我想做的是当我点击页面时1 2等等 我应该一次只能获取 10 行 我的意思是 当页面加载时 我只想
  • 通过 VB.NET 和 C# 中的 Ref 参数

    我有与传递参数 byRef 相关的问题 我有基于 VB NET 的类库 其中一些函数是使用 byref 参数类型定义的 这些参数是父类对象 当我尝试调用此函数并在 byref 参数中传递子类对象时 它在 VB NET 中工作 但我无法在 C
  • 比较两个字符串ArrayList

    我有两个数组列表 dim Colors1 New ArrayList Colors1 Add Blue Colors1 Add Red Colors1 Add Yellow Colors1 Add Green Colors1 Add Pur
  • 为 ASP.NET MVC 实现自定义登录

    我是 ASP NET MVC 的新手 需要一些关于如何实现以下内容的建议 该站点是一个使用率很高的站点 内部 内联网 约有 200 个用户 我们使用表单身份验证来访问 SQL Server DB 不是 Windows 集成 有些操作受到保护
  • VB.NET 空合并运算符? [复制]

    这个问题在这里已经有答案了 可能的重复 VB NET 中的合并运算符和条件运算符 https stackoverflow com questions 629036 coalesce operator and conditional oper
  • 如何将 POST 请求内容保存为 .NET 中的文件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个客户端应用程序POST请求a
  • vb.net 中的简单 rot13 编码器

    我正在寻找一种简单的方法将输入的文本编码为 Rot13 在能够将单词分离为单个字符和整数以便我可以更改每个字符并输出结果的阶段 我遇到了困难 我可以使用下面列出的简单 if 语句来使用单个字母来完成此操作 但如果有人可以帮助找到整个单词的方
  • IIS7.5 WCF 服务 - HTTP 错误 401.3(即使在添加 IIS_IUSRS 后)

    我们有使用 NT Authority Network Service 的网站 Response Write WindowsIdentity GetCurrent Name 该网站使用托管在 IIS 7 5 中的 WCF 服务 当我们浏览服务
  • 将图像另存为“位图图像”以访问数据库

    我能够使用内存流成功将图像保存到 Access 数据库表 我保存图像的列的数据类型为 OLEObject 当我打开表时 我在此图像列中看到 长二进制数据 值 问题是 当我在此数据库中创建任何报告时 我无法看到图像 而当我在MSPaint中打
  • MouseHover 事件中的鼠标坐标?

    我知道如何检索鼠标坐标PictureBox Click虽然事件e In a PictureBox MouseHover e不返回此类信息 如何获取鼠标坐标MouseHover事件 有办法吗 提前致谢 Control MouseHover h
  • 适用于 VB6 程序员的 Option Strict On 和 .NET

    我正在准备一门关于 Visual Basic 2005 的课程 目标对象是迁移到 NET 平台的 Visual Basic 6 程序员 我想听听关于是否建议他们始终启用的建议选项严格 or not 我只使用 C 风格的编程语言 主要是 Ja
  • VB换行转义字符?

    在C中我使用 1st line 1 n2nd line 对于换行符 但是 VB 呢 我知道 1st line VbCrLf 2nd line 但它太冗长了 VB中换行符的转义字符是什么 我要打印 1st line 2nd line 我尝试使
  • 中继器按钮命令参数为空字符串

    我对这个失去了理智 即使命令参数已设置 我的按钮也会获得空字符串的命令参数 我已经验证它在调试模式下设置为正确的 ID 但是当我稍后在中继器 ItemCommand 事件中访问此命令参数时 命令参数是空字符串 我不知道为什么 我最终得到了
  • 在word中添加超链接,使用vb.net

    我目前正在尝试通过 VB 程序在 word 中添加一个指向 web url 的超链接 我正在跌跌撞撞地尝试找到正确的语法以及完成此任务所需的内容 因为我收到了很多无用的 VBA 示例 而这根本不是我需要的 我的代码如下所示 sPara2 o
  • 用于确定应用程序是否在 Citrix 或终端服务上运行的 API [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以调用的 API 函数来确定软件是否在 Citrix 终端服务或独立 PC 上运行 最
  • 不建议在 VB.Net 中使用 Mid()、Instr()、LBound()、UBound() 等吗?

    我有 C 背景 但现在主要使用 VB Net 在我看来 上述函数 以及其他函数 例如 UCase LCase 等是 VB6 及之前版本的遗留物 在 VB Net 中使用这些函数是不受欢迎的 还是纯粹取决于个人喜好 我个人的偏好是远离它们 但
  • 是否可以为 Visual Studio 2010 编写一个调试器可视化工具来显示 64 位 .NET 程序?

    是否可以为 Visual Studio 2010 编写一个调试器可视化工具来显示 64 位 NET 程序的数据 我已经为 32 位编程编写了它们 但我无法设法使用或编译它们以用于 64 位应用程序 有什么建议么 我刚刚经历过同样的问题 我使
  • 这种 JavaScript 编码风格有什么问题? (闭包与原型)

    我们一直在讨论如何最好地处理我们的 JS 应用程序中的对象 研究 Stoyan Stefanov 的书 阅读无数关于 新 这个 原型 闭包等的 SO 帖子 事实上有很多 而且它们有这么多相互竞争的理论 表明没有完全明显的答案 让我们假设我们

随机推荐