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