2

非常に単純なラムダ式を解析するときに、奇妙な問題に直面しています。

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 (?????) のラムダ式を返します。

Expression(Of Func(Of Class2)) から Expression(Of Func(Of Class1)) への変換に関係していると思います

Option Strict などのプロジェクト プロパティをいじってみましたが、VB で動作させることができません。

VB で正しいラムダ式を取得する方法はありますか? EnterpriseLibrary TraceListener を実装するにはこれが必要です。GetExpression() を呼び出す基本クラスは、ラムダを検証し、それを System.Linq.Expressions.NewExpression にキャストしようとします (VB では Convert のために UnaryExpression であるため失敗します)。

ありがとう

ルノー

4

1 に答える 1

0

Visual Studio (V2008、64 ビット コンソール アプリケーション、3.5 フレームワーク) で両方のコードを実行すると、どちらも次の式を返します。NodeType == ExpressionType.Lambda

于 2013-04-16T06:54:45.860 に答える