【问题标题】:VB.net newbie trying to convert some c# codeVB.net 新手试图转换一些 c# 代码
【发布时间】:2011-01-11 20:15:05
【问题描述】:

我在将以下相当直接的 c# 代码转换为 vb.net 4.0 时遇到了麻烦,据我所知,它有匿名委托。我只是还没有弄清楚。

_combo.DataBound += (sender, args) =>
                                    {
                                        var item = _combo.FindItemByValue(values[0].ToString());
                                        if (item != null)
                                            item.Selected = true;
                                    };

我已经尝试了以下

_combo.DataBound += Function(sender, args)
                                        Dim item = _combo.FindItemByValue(values(0).ToString())
                                        If item IsNot Nothing Then
                                            item.Selected = True
                                        End If

                                    End Function

但是编译器报错不能直接调用DataBound,必须用RaiseEvents调用

【问题讨论】:

  • 我不是 .net 类型,但我真的很好奇(顺便说一句)为什么有人想要将代码从 c# 转换为 vb。我敢肯定有一个很好的理由,但它是什么?
  • 这是从我正在处理的一个问题的论坛帖子中提取的。该项目是 vb.net(不是我的强项。),关于我正在处理的问题的讨论全部在 c# 中。
  • 啊,很公平。说得通。我的哀悼。
  • VB.NET 中的匿名委托必须是单行的。在单行中完成上述操作是一个挑战,或者您需要调用一个中间函数。

标签: vb.net anonymous-function anonymous-methods c#-to-vb.net


【解决方案1】:

AddHandler _combo.DataBound, Function(sender, args)... End Function 是我认为正确的语法。

【讨论】:

  • 这是与匿名代表内联的正确方法,谢谢。请参阅我的答案,了解将其更改为常规事件和委托的方法。
【解决方案2】:

我想我明白了。

声明一个事件

私人事件 OnCombo_DataBound(ByVal 值 作为数组列表)

使用 RaiseEvent 触发它

RaiseEvent OnCombo_DataBound(values)

为事件创建处理程序

 Private Sub Combo_DataBound(ByVal values As System.Collections.ArrayList) Handles OnCombo_DataBound
                Dim item = _combo.FindItemByValue(values(0).ToString())
                If item IsNot Nothing Then
                    item.Selected = True
                End If
            End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-24
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多