Argument Type Not assignable using Lambda parameter
Argument Type Not assignable using Lambda parameter
我提前道歉,因为我没有联系起来理解整体情况。
这种方法违反了DRY原则,并且有一个常用的第三方库,通常可以像这样调用:
ThirdLibrary.DoWork(x => x.Blah....);
在尝试重构这个方法时,我希望提取出这行代码和附近的一些代码到一个单独的方法中....但是我需要传递lambda表达式,谷歌引导我到了这里和这里。
我的困难在于如何针对第三方库将其参数化。
第三方元数据显示它期望:
public IDoWorkDoWork(Expression > expression);
我在如何为我的方法参数化方面遇到了困难。
public void RepoDoWork(Actiondoworkrule) { ThirdLIbrary.DoWork(doworkrule); }
这导致了错误:参数类型无法分配给参数类型。
感谢您的帮助,帮助我正确理解如何正确传递lambda表达式。
“Argument Type Not assignable using Lambda parameter”这个问题的出现是因为方法要求传入的参数类型是Expression,而你尝试传入的是委托(delegate),因此没有可用的转换方式,所以会出现错误。
要解决这个问题,你应该将适当的Expression传递给你的辅助方法,然后再传递给第三方方法。你可以尝试将委托包装到Expression中,但在大多数情况下,这样做在运行时不会产生有用的结果。通常,当方法接受一个Expression时,这意味着它将以某种方式解构表达式,并基于它构建逻辑。常见的例子是LINQ-to-SQL根据传递给Queryable.Where(...)调用的lambda表达式构建SQL查询,或者Moq框架使用表达式设置方法模拟。