2010-08-12 103 views
2

我試圖給一個函數在C#轉換爲2008年VB.Net,似乎無法讓Lambda表達式工作。該代碼是從neat little C# SMTP server,節省郵件到Azure的Blob存儲C#拉姆達到VB.Net

任何幫助將不勝感激拍攝。

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(); 
     } 
    } 
+0

http://social.msdn.microsoft.com/Search/en-US/?Query=vb.net+lambda+expressions,尤其是[Lambda表達式(Visual Basic中)](http://msdn.microsoft。 com/en-us/library/bb531253.aspx) – 2010-08-12 02:59:38

+0

您使用的是.Net 4.0嗎? – Gabe 2010-08-12 03:18:00

+0

我使用的.Net 3.5 SP1 – Anthony 2010-08-12 05:01:53

回答

1

我設法得到它使用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 
1

lambda基本上只是一個匿名代理的簡寫。

所以更換

(ar)=> {//Do Stuff}

Sub(ar) 
'Do stuff 
End Sub 
+0

但它是在listener.BeginAcceptSocket輸入參數,因此它不能是一個子。 – Anthony 2010-08-12 05:28:54

0

我推斷你」在這種情況下,重新使用Visual Studio 2008你不能在VS2008中編寫多行lambda表達式。

你必須使用VS2010,否則你將不得不使用Anthony's answer