0

我在“BindSetMember”方法中有以下返回行:

return new DynamicMetaObject(Expression.TypeAs(methodCall, binder.ReturnType), restrictions)

它不会将“methodCall”表达式中返回的“bool”值装箱(给出类型转换错误)。我预计表达式方法“methodCall”的返回值(bool)将被装箱到对象类型中(因为该方法返回“bool”,但 DLR 调用站点需要“object”;规范说装箱应该在“TypeAs”时发生' 用来)。我也尝试过“Expression.Convert”,但我不断收到类型转换错误。为什么这不起作用?我是否被迫创建一个 lambda 表达式来转发呼叫!?:(

谢谢。

(仅供参考:这个问题与现有问题相似,但我在这里提出一个具体问题以寻求可能的替代解决方案)

4

1 回答 1

1

我发现了这个问题。我曾认为转换问题是由于方法表达式的返回类型造成的,但我忘记了我也有一个方法参数的转换表达式 - 正是这种转换出错了。我有一个从给定对象到值类型的显式转换,但经过进一步调查,事实证明,在隐式转换起作用之前,您必须将“对象”转换为实际类型。;)

因此,总而言之,如果您有一个返回“对象”以外的其他内容的方法,只需使用“Expression.Convert”或“Expression.TypeAs”将返回类型转换/装箱为对象类型。;)

于 2013-08-14T19:52:54.190 回答