C#拉姆达到VB.Net
问题描述:
我试图给一个函数在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();
}
}
答
我设法得到它使用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
答
lambda基本上只是一个匿名代理的简写。
所以更换
(ar)=> {//Do Stuff}
与
Sub(ar)
'Do stuff
End Sub
+0
但它是在listener.BeginAcceptSocket输入参数,因此它不能是一个子。 – Anthony 2010-08-12 05:28:54
答
我推断你”在这种情况下,重新使用Visual Studio 2008你不能在VS2008中编写多行lambda表达式。
你必须使用VS2010,否则你将不得不使用Anthony's answer。
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
您使用的是.Net 4.0吗? – Gabe 2010-08-12 03:18:00
我使用的.Net 3.5 SP1 – Anthony 2010-08-12 05:01:53