C# 方法调用表达式的返回对象不为';行不通

C# 方法调用表达式的返回对象不为';行不通,c#,.net,dynamic,C#,.net,Dynamic,我在“BindSetMember”方法中有以下返回行: 它不会将“methodCall”表达式返回的“bool”值框入框中(给出类型转换错误)。我希望表达式方法“methodCall”的返回值(bool)会被装箱到对象类型中(因为该方法返回“bool”,但DLR调用站点需要“object”;规范说装箱应该在使用“TypeAs”时发生)。我也尝试过“Expression.Convert”,但我一直遇到类型转换错误。为什么这不起作用?我是否被迫创建lambda表达式来转发调用!?:( 谢谢 (仅供参

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

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

谢谢


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

我发现了这个问题。我原以为转换问题是由于方法表达式的返回类型造成的,但我忘了我也有一个方法参数的转换表达式-正是该转换出错。我有一个从给定对象到值类型的显式转换,但经过进一步调查,它事实证明,在隐式转换生效之前,必须将“object”转换为实际类型


因此,总而言之,如果您有一个返回“object”以外的内容的方法,只需使用“Expression.Convert”或“Expression.TypeAs”即可将返回类型转换为对象类型

你是说这个return语句所针对的方法应该返回bool?类似于
public bool BindSetMember(object methodCall,object restrictions){返回新的DynamicMetaObject(Expression.TypeAs(methodCall,binder.ReturnType),restrictions);}
?如果是这样的话,DynamicMetaObject就不是bool了。不,忘了行所在的方法吧。我说的是“methodCall”,这是对行中变量的引用。对于误解,我深表歉意。不过我还是很困惑。Expression.TypeAs方法的第一个参数应为表达式,而不是对象。如果我仍然完全偏离了底线,我将避免发表评论,因为在这一点上我已经得出结论,我不知道我在说什么抱歉,“methodCall”是一个方法调用表达式。对不起,我没提那件事。我会更新帖子的。很高兴你弄明白了。谢谢。与表达式打交道真是让人心烦意乱。英雄联盟
return new DynamicMetaObject(Expression.TypeAs(methodCall, binder.ReturnType), restrictions)