【问题标题】:C# Lambda to VB.NetC# Lambda 到 VB.Net
【发布时间】:2010-08-12 02:50:11
【问题描述】:

我正在尝试将 C# 中的函数转换为 VB.Net 2008,但似乎无法使 Lambda 表达式工作。代码取自neat little C# SMTP server,该neat little C# SMTP server 将电子邮件保存到 Azure blob 存储

任何帮助将不胜感激。

    public void Run()
    {
        var mutex = new ManualResetEvent(false);
        while (true)
        {
            mutex.Reset();
            listener.BeginAcceptSocket((ar) =>
                {
                    mutex.Set();
                    processor.ProcessConnection(listener.EndAcceptSocket(ar));
                }, null);
            mutex.WaitOne();
        }
    }

【问题讨论】:

标签: c# vb.net lambda


【解决方案1】:

lambda 基本上只是匿名委托的简写。

所以替换

(ar)=> {//Do Stuff}

Sub(ar)
 'Do stuff
End Sub

【讨论】:

  • 但它是 listener.BeginAcceptSocket 上的输入参数,所以它不能是 sub。
【解决方案2】:

我设法使用 Tangible Software 的 InstantVB 将其正确转换为 VB 2008

Public Sub Run()
    Dim mutex = New ManualResetEvent(False)
    Do
        mutex.Reset()
        listener.BeginAcceptSocket(Function(ar) AnonymousMethod1(ar, mutex), Nothing)
        mutex.WaitOne()
    Loop
End Sub

Private Function AnonymousMethod1(ByVal ar As Object, ByVal mutex As ManualResetEvent) As Object
    mutex.Set()
    processor.ProcessConnection(listener.EndAcceptSocket(ar))
    Return Nothing
End Function

【讨论】:

    【解决方案3】:

    我推断您使用的是 Visual Studio 2008,在这种情况下,您无法在 VS2008 中编写多行 lambda 语句。

    您必须使用 VS2010,否则您必须使用 Anthony's answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多