参数类型不可使用 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 框架。
我想提前道歉,因为我没有把点连接起来,了解大局。
此方法违反了 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 框架。