2013-04-15 85 views
2

解析一个非常简单的lambda表达式时,我遇到了一个奇怪的问题。vb.net vs C#lambda表达式

在C#,我有这个

class Class1 
{ 
} 

class Class2 : Class1 
{ } 

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

此,如所预期的返回用的NodeType表达式=新

在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 

这将返回一个lambda表达与NodeType =转换(?????)

我想它与转换f rom表达式(的Func(的Class2))表达式(的Func(的Class1))

我试着玩像项目属性像选择严格...我不能让它在VB中工作。

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

由于

雷诺

回答

0

当我运行的代码在Visual Studio两个片断(V2008,64位控制台应用程序,3.5框架),它们都返回与NodeType == ExpressionType.Lambda

+0

对不起,我忘了一个表达提及我使用VS 2010和.Net 4.0 –