这个C#语法的VB等价物是什么,用于处理委托?

这个C#语法的VB等价物是什么,用于处理委托?,c#,vb.net,delegates,lambda,C#,Vb.net,Delegates,Lambda,是否可以使用VB 9.0将以下C#代码翻译成VB.NET delegate Stream StreamOpenerDelegate(String name); void Exec1() { WorkMethod( x => File.OpenRead(x)); } void Exec2() { StreamOpenerDelegate opener = x => return File.OpenRead(x) ; WorkMethod(opener); }

是否可以使用VB 9.0将以下C#代码翻译成VB.NET

delegate Stream StreamOpenerDelegate(String name);

void Exec1()
{
    WorkMethod( x => File.OpenRead(x));
}

void Exec2()
{
    StreamOpenerDelegate opener = x => return File.OpenRead(x) ;
    WorkMethod(opener);
}
我可以这样做吗

Private Delegate Function StreamOpenerDelegate(ByVal name As String) As Stream

Private Sub WorkMethod(ByVal d As StreamOpenerDelegate)
    ''
End Sub

Private Sub Exec1()
    Me.WorkMethod(Function (ByVal x As String) 
        Return File.OpenRead(x)
    End Function)
End Sub

Private Sub Exec2()
    Dim opener As StreamOpenerDelegate = Function (ByVal x As String) 
        Return File.OpenRead(x)
    End Function
    Me.WorkMethod(opener)
End Sub
我试图写一些文档,但我不知道VB语法。我经常翻译它,但我不确定它在这种情况下是否有效。我也不清楚哪里需要行延续字符


回答
在VB9中,不可能有多行lambda(或子lambda,我没有问过)。在VB9中,所有lambda都返回一个值,并且必须是单个表达式。这将在VB10中更改。VB10将允许上述语法,但VB9将不允许。在VB9中,如果逻辑涉及多个代码行,则它不能是lambda;必须将其放入命名函数中并显式引用它。像这样:

Private Delegate Function StreamOpenerDelegate(ByVal name As String) As Stream

Private Sub WorkMethod(ByVal d As StreamOpenerDelegate)
    ''
End Sub

Function MyStreamOpener(ByVal entryName As String) As Stream
    '' possibly multiple lines here
    Return File.OpenRead(entryName)
End Function

Private Sub Exec1()
    Me.WorkMethod(AddressOf MyStreamOpener)
End Sub
站点:

这应该可以:

Private Sub Exec1()
    Me.WorkMethod(Function (x) File.OpenRead(x))
End Sub

Private Sub Exec2()
    Dim opener As StreamOpenerDelegate = Function (x) File.OpenRead(x)

    Me.WorkMethod(opener)
End Sub
您需要行连续字符将单行语句拆分为多行,如下所示:

Private Sub Exec1()
    Me.WorkMethod(Function (x) _
                    File.OpenRead(x))
End Sub

Private Sub Exec2()
    Dim opener As StreamOpenerDelegate = Function (x) _
                                           File.OpenRead(x)

    Me.WorkMethod(opener)
End Sub

在任何情况下,在某些字符后都有隐式行继续。这样我就不用太担心了。

好吧,我也只能在这里问反射器了。而且它很擅长翻译语法:-)