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

时间:2015-02-04 19:10:52

标签: c# lambda

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

这种方法违反了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。

1 个答案:

答案 0 :(得分:1)

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

要解决此问题,您应该将正确的Expression传递给您的助手,并将其传递给第三方方法。

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