2

解析一个非常简单的 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,因为转换)。

谢谢

雷诺

4

1 回答 1

0

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

于 2013-04-16T06:54:45.860 回答