将 C# 语句体 lambda 转换为 VB

2023-12-09

VS8 中的 VB 似乎不支持/转换带有语句主体的 lambda 表达式。我在 C# 应用程序中使用它们,但现在必须将其转换为 VB。

我正在动态创建一大堆控件,并且我希望能够动态地为它们提供事件处理程序。这样我就可以从数据库构建动态用户界面。在下面的代码中,我将创建一个表单和一个复选框,使复选框控制表单的可见性,向表单添加一些方法处理程序,然后将新创建的复选框添加到预先存在的表单/面板等。例如,表单的处理程序会影响复选框:

  // Inside some loop creating a lot of these forms and matching checkboxes
      Form frmTemp = frmTestPanels[i];  // New form in array
      CheckBox chkSelectPanel;          // New checkbox that selects this panel
      chkSelectPanel = new CheckBox();
      chkSelectPanel.Text = SomeName;   // Give checkbox a label
      chkSelectPanel.Click += (ss, ee) =>  // When clicked
      {
          label1.Text = SomeName;       // Update a label
          if (chkSelectPanel.Checked)   // Show or hide the form
          {
              frmTemp.Show();
          }
          else
          {
              frmTemp.Hide();
          }
      };

      frmTemp.VisibleChanged += (ss, ee) =>  // When form visibility changes
      {
          chkSelectPanel.Checked = frmTemp.Visible;  // Reflect change to checkbox
          ConfigurationFileChanged = true;   // Update config file later
      };

      frmTemp.FormClosing += (ss, ee) =>     // When the form closes
      {   // We're only pretending to close the form - it'll sit around until needed
          chkSelectPanel.Checked = false;    // Update the checkbox
          frmTemp.Hide();                    // Hide the form
          ee.Cancel = true;                  // Cancel the close
      };

      flpSelectGroup.Controls.Add(chkSelectPanel); // Add checkbox to flow layout panel
  // End of loop creating a bunch of these matching forms/checkboxes

当然,我遇到了转换错误:

VB 不支持带有语句体的匿名方法/lambda 表达式

我真的很喜欢动态创建所有内容,然后让对象自行处理的能力 - 我不需要添加任何特殊函数来确定哪个表单提供关闭事件,以便它可以搜索正确的复选框并更新复选框 - It Just Works (TM)。

不幸的是它需要转换为VB。

将 lambda/匿名语句体转换为可在 VB 中运行的内容的最佳方法是什么,特别是当需要创建其中许多语句体时?


等待.NET 4的最新版本,它将支持VB中的此类功能。看不到其他选择。

丑陋的替代品是:

  1. 这可行,但您可以在函数中使用单个语句。

    AddHandler Me.Click, Function(o, e) MessageBox.Show("text")
    
  2. 创建一些常规的 Sub Foo

    Public Sub Foo(ByVal o As Object, ByVal e As EventArgs)
         MessageBox.Show("text")
    End Sub
    

    and use AddHandler将其绑定到事件

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

将 C# 语句体 lambda 转换为 VB 的相关文章

随机推荐

  • WP7 将文本环绕图像

    我有这个代码
  • 如何使用 Google Cloud Shell 安排 shell 脚本?

    我有一个存储在 GCS 中的 sh 文件 我正在尝试通过 google cloud shell 安排 sh 文件 我可以使用运行相同的文件gsutil cat gs miptestauto baby sh sh命令但无法安排它 以下是我用于
  • SMTP GMAIL 连接

    我无法使用 PHPMailer 连接到 SMTP GMAIL 这是错误 2015 年 6 月 25 日 22 54PM 出错 stream socket client 无法 连接到 smtp gmail com 587 连接超时 home
  • 获取有关 Swift 中进程的信息

    我正在尝试获取有关 Swift 中流程的一些数据 我使用这段代码作为起点 pid t pid 10000 rusage info current rusage if proc pid rusage pid RUSAGE INFO CURRE
  • Angular 没有给出复选框的当前状态

    我已经开始构建一个 ToDo 示例应用程序 我面临一个奇怪的问题 下面是待办事项列表的 HTML 代码 在该列表中 我为复选框设置 ngModel 并触发更改事件 监听变化的代码 我只将当前状态打印到控制台 看下图 您可以看到复选框的当前状
  • Linux 上的 pthreads 是如何被调度程序看到的

    我有一个关于 Linux 上 pthread 实现的问题 假设一个进程有5个线程 现在调度程序如何看到这些线程 或根本看不到 例如当调度程序被调用时 它是否只调度主进程 然后主进程有责任在每个线程之间进行调度 或者是另一种方式 调度程序调度
  • 为什么必须限定重载模板基类方法的范围?

    我似乎无法在不将范围限定到基类的情况下调用基类的方法 这似乎是因为我重载了该方法 如果我不重载该方法 那么编译器不会抱怨 这是我想做的一个例子 struct BaseClass template
  • 是否可以在 go 插件和应用程序之间共享自定义数据类型?

    我知道可以查找导出的 go plugin 符号并将它们键入到界面 但是 我想知道是否有一种方法可以将它们键入到结构中 例如 有办法做到吗 例如 插件 go package main type Person struct Name strin
  • 如何检查Android设备是HDPI屏幕还是MDPI屏幕?

    我想检查这个以通过互联网获取不同的图像 怎么做 density getResources getDisplayMetrics density return 0 75 if it s LDPI return 1 0 if it s MDPI
  • 在android中将文件写入sdcard

    我想在 SD 卡上创建一个文件 在这里我可以创建文件并将其读 写到应用程序中 但我想要的是 文件应该保存在 SD 卡的特定文件夹中 我怎样才能做到这一点使用FileOutputStream create file public void c
  • UITableViewCell 子类布局在禁用自动布局的故事板中混乱

    我在故事板中创建了一个带有原型单元的表格视图 并且在 Xcode 5 中未选中 使用自动布局 cells是UITableViewCell的子类 主要是添加IBOutlets 里面没有任何代码 结果是布局混乱 我尝试更改自动调整大小蒙版 但没
  • 证书签名请求中手动创建的签名与 openssl req 生成的签名不匹配

    使用以下命令创建证书签名请求 openssl genrsa out test key 2048 openssl req new key test key subj CN foo out foo csr 在提供的步骤的帮助下 marc我从中提
  • 从 HTML PHP 联系表单中删除错误字符

    PHP 新手 但取得新进展 我有一个联系表单 在用户提交后会发送电子邮件 现在我想通过删除坏字符或任何可能破坏电子邮件的内容来改进此表单 该电子邮件将由我阅读 因此从技术上讲我可以浏览所有垃圾邮件 但我不想这样做 我想要一封干净的电子邮件用
  • PHP OOP:每个参数类型都有唯一的方法?

    我正在写一些自制的 ORM 学术兴趣 我试图将 TDD 概念作为一项培训练习 并且作为该练习的一部分 我在开发课程时为 API 编写文档 举个例子 我正在研究一个经典的 getCollection 类型映射器类 我希望它能够检索特定用户的资
  • 将字节数组转换为 Angular6 中的图像

    我已从服务器发送字节数组中的图像文件 现在我必须将其转换为jpeg文件并将其显示在网页中 Code app get getPhoto hash function req res console log req params hash inv
  • 将 std::string 转换为 std::chrono::duration

    我的目标是转换一张单曲string以形式 H M S to chrono duration in C 11 举个例子 为了转换 00 15 00 我想出了以下间接解决方案 我计算了两个时间点 1 00 15 00 和 2 00 00 00
  • querySelectorAll 检测输入中的值

    我有多个输入 我想根据用户是否在其中输入值来进行区分
  • 将数据插入 netezza 中的外部表时出现错误 [08S01] 通信链路失败

    我正在尝试将数据从文本文件加载到外部表中Netezza 这是我的命令 INSERT INTO XTABLE DHARMESH SELECT FROM EXTERNAL C Dhams mergeresult txt USING delimi
  • 圆 - 线相交无法正常工作?

    我在之后写了这个圆线相交检测http mathworld wolfram com Circle LineIntersection html 但看起来像是这样 或者我错过了一些东西 public static bool Intersect V
  • 将 C# 语句体 lambda 转换为 VB

    VS8 中的 VB 似乎不支持 转换带有语句主体的 lambda 表达式 我在 C 应用程序中使用它们 但现在必须将其转换为 VB 我正在动态创建一大堆控件 并且我希望能够动态地为它们提供事件处理程序 这样我就可以从数据库构建动态用户界面