vb.net vs C#lambda表达式

时间:2013-04-15 15:19:56

标签: vb.net lambda

在解析一个非常简单的lambda表达式时,我遇到了一个奇怪的问题。

在C#中,我有这个

class Class1
{
}

class Class2 : Class1
{ }

class Invoker
{
    public System.Linq.Expressions.Expression<Func<Class1>> GetExpression()
    {
        return () => new Class2();
    }
}

这正如预期的那样返回一个NodeType = New

的表达式

在VB.NET中,我有

Public Class Class1

End Class

Public Class Class2
    Inherits Class1

End Class

Public Class Invoker
    Public Function GetExpression() As Expression(Of Func(Of Class1))
        Return Function() New Class2()
    End Function

End Class

返回一个带有NodeType = Convert(?????)

的lambda表达式

我想它与从Expression(Of Func(Of Class2))到Expression(Of Func(Of Class1))的转换有关。

我尝试使用像Option Strict这样的项目属性...我无法在VB中使用它。

有没有办法在VB中获得正确的lambda表达式?我需要这个来实现EnterpriseLibrary TraceListener。调用GetExpression()的基类验证lambda并尝试将其强制转换为System.Linq.Expressions.NewExpression(因为转换而在VB中失败,因为它是UnaryExpression)。

由于

雷诺

1 个答案:

答案 0 :(得分:0)

当我在Visual Studio(V2008,64位控制台应用程序,3.5框架)中运行两段代码时,它们都返回带有NodeType == ExpressionType.Lambda的表达式