参数类型不可使用 Lambda 参数分配

Argument Type Not assignable using Lambda parameter

我想提前道歉,因为我没有把点连接起来,了解大局。

此方法违反了 DRY,并且有一个常用的第 3 方库,通常可以这样调用:

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

在尝试重构此方法时,我希望将此行和它附近的一些其他方法提取到一个单独的方法中....但我需要传入 lambda,Google 导致我 here and here.

我的困难在于使用第三方库转换为我的确切情况。

第三方元数据显示它正在等待:

public IDoWork<T> DoWork(Expression<Action<T>> expression);

我对如何为我的方法参数化它感到困惑。

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

这会产生错误 Argument type is not assignable to parameter type。

感谢您帮助我理解如何正确传递 lambda。

方法要求 Expression<...>,您尝试通过委托 - 没有有用的转换,因此会失败。

要修复,您应该将正确的 Expression 传递给您的助手,然后传递给第三方方法。

您可以尝试将委托包装到表达式中,但在大多数情况下它不会在 运行 时产生有用的结果。通常当方法采用表达式时,这意味着它将以某种方式解构表达式并基于它构建逻辑。常见示例是 LINQ-to-SQL 基于 lambda 构造 SQL 查询,基于 Queryable.Where(...) 调用或使用表达式设置方法模拟的 Moq 框架。