Argument Type Not assignable using Lambda parameter

19 浏览
0 Comments

Argument Type Not assignable using Lambda parameter

我提前道歉,因为我没有联系起来理解整体情况。

这种方法违反了DRY原则,并且有一个常用的第三方库,通常可以像这样调用:

ThirdLibrary.DoWork(x => x.Blah....);

在尝试重构这个方法时,我希望提取出这行代码和附近的一些代码到一个单独的方法中....但是我需要传递lambda表达式,谷歌引导我到了这里这里

我的困难在于如何针对第三方库将其参数化。

第三方元数据显示它期望:

public IDoWork DoWork(Expression> expression);

我在如何为我的方法参数化方面遇到了困难。

public void RepoDoWork(Action doworkrule)
{
   ThirdLIbrary.DoWork(doworkrule);
}

这导致了错误:参数类型无法分配给参数类型。

感谢您的帮助,帮助我正确理解如何正确传递lambda表达式。

0
0 Comments

“Argument Type Not assignable using Lambda parameter”这个问题的出现是因为方法要求传入的参数类型是Expression,而你尝试传入的是委托(delegate),因此没有可用的转换方式,所以会出现错误。

要解决这个问题,你应该将适当的Expression传递给你的辅助方法,然后再传递给第三方方法。你可以尝试将委托包装到Expression中,但在大多数情况下,这样做在运行时不会产生有用的结果。通常,当方法接受一个Expression时,这意味着它将以某种方式解构表达式,并基于它构建逻辑。常见的例子是LINQ-to-SQL根据传递给Queryable.Where(...)调用的lambda表达式构建SQL查询,或者Moq框架使用表达式设置方法模拟。

0