[英]Passing in an anonymous method/function as a parameter in C#
我有一个需要有条件地执行方法的方法,如下所示:
int MyMethod(Func<int> someFunction)
{
if (_someConditionIsTrue)
{
return someFunction;
}
return 0;
}
我希望能够将 Linq 查询作为 someFunction 传递给 MyMethod:
int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));
我该怎么做呢?
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));
如您所见,我已将查询放入 lambda。 您必须这样做,因为否则,您的查询将在调用MyMethod
之前执行(...并且会引入编译时错误;))而不是在执行时执行。
旁注:
这return someFunction;
应该return someFunction();
.
也许这是一个错字,但在 MyMethod 中您需要实际调用 function:
return someFunction();
调用它时,您直接调用 function。 相反,您需要传递 lambda 表达式。 此外,您似乎正在传递Func<IEnumerable<int>>
; 添加Single()
, SingleOrDefault()
, First()
或FirstOrDefault()
:
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.