5

次の例外が発生しました。これGuidは、オブジェクトではないことを示しているようです。

タイプ「System.Guid」の式は、リターンタイプ「System.Object」には使用できません。

どのようGuidにオブジェクトではありませんか?

そして、コンパイラはこれをどのように理解しますか?型がオブジェクトではない場合に実行時に検出できるものがあるはずです。もしそうなら、これは何でしょうか?

====================追加情報で編集====================

Expression.Lambda<Func<object>>(SomeExpression)

SomeExpressionは、重要なすべての点で、Guidの定数値である可能性があります。

4

1 に答える 1

17
Expression.Lambda<Func<object>>(SomeExpression)

ここでの問題は、式ツリーを誤って使用していることです。ボックス操作はC#で暗黙的に行われていますが、それでも存在します。式ツリーでは暗黙的ではありません。以下はそれを修正する必要があります:

Expression.Lambda<Func<object>>(
    Expression.Convert(SomeExpression, typeof(object))

SomeExpression.Type.IsValueTypeこの追加の明示的な変換を追加するかどうかを決定するためにチェックすることもできます。

于 2013-02-26T08:24:09.350 に答える