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 回答