我想提前道歉,因为没有连接点来理解大局。
这种方法违反了DRY并且有一个共同使用的第三方库,通常可以被称为:
ThirdLibrary.DoWork(x => x.Blah....);
在尝试重构这个方法时,我想要这一行,并且它附近的其他一些提取到一个单独的方法....但我需要传入lambda,Google引导我到here和{{3} }
我的困难在于转换到我与第三方图书馆的确切情况。
第三方元数据显示它正在期待:
public IDoWork<T> DoWork(Expression<Action<T>> expression);
我绊倒了如何为我的方法参数化。
public void RepoDoWork(Action<ICustomerRepository> doworkrule)
{
ThirdLIbrary.DoWork(doworkrule);
}
这会产生错误参数类型不能赋予参数类型。
感谢您的帮助,帮助我了解如何正确传递lambda。
答案 0 :(得分:1)
方法要求Expression<...>
,并且您尝试传递委托 - 没有有用的转换,因此会失败。
要解决此问题,您应该将正确的Expression
传递给您的助手,并将其传递给第三方方法。
您可以尝试将委托包装到表达式中,但在大多数情况下,它不会在运行时生成有用的结果。通常当方法采用表达式时,它意味着它将以某种方式解构表达式并基于它构建逻辑。常见的例子是LINQ-to-SQL构建基于lambdas的SQL查询,基于Queryable.Where(...)
调用或Moq框架使用表达式来设置方法模拟。