我在“BindSetMember”方法中有以下返回行:
return new DynamicMetaObject(Expression.TypeAs(methodCall, binder.ReturnType), restrictions)
哪个不会从'methodCall'表达式中包含返回的'bool'值(给出类型转换错误)。我期望表达式方法'methodCall'的返回值(bool)将被装入一个对象类型(因为该方法返回'bool',但DLR调用点需要'对象';规范说明当'TypeAs时应该发生装箱' 用来)。我也试过“Expression.Convert”,但我一直遇到类型转换错误。为什么这不起作用?我被迫创建一个lambda表达式来转发呼叫!? :(
感谢。
(仅供参考:这个问题类似于现有的问题,但我在这里提出一个具体的问题,以寻找可能的替代解决方案)
答案 0 :(得分:1)
我发现了这个问题。我原以为转换问题是由于方法表达式的返回类型所致,但是我忘记了其中一个方法参数的转换表达式 - 而且这个转换是错误的。我有一个显式转换为给定对象的值类型,但经过进一步调查,结果发现你必须在隐式转换工作之前将“对象”转换为实际类型。 ;)
因此,总而言之,如果你有一个返回“object”以外的东西的方法,只需使用“Expression.Convert”或“Expression.TypeAs”将返回类型转换/包装成对象类型。 ;)