在 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));
我该如何执行此操作?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如您所见,我已将查询转换为 lambda。您必须这样做,因为否则,您的查询将在调用 MyMethod 之前执行(...并且会引入编译时错误;)),而不是在执行时执行。
附注:
这个
return someFunction;
应该是return someFunction();
。As you can see, I've made the query into a lambda. You will have to do this because otherwise, your query will be executed just before calling
MyMethod
(...and will introduce compile-time errors ;) ) and not while it executes.A side note:
This
return someFunction;
should bereturn someFunction();
.也许这是一个拼写错误,但在 MyMethod 中,您需要实际调用该函数:
并且在调用它时,您是直接调用该函数。相反,您需要传递 lambda 表达式。另外,您似乎传递了一个
Func>
;添加Single()
、SingleOrDefault()
、First()
或FirstOrDefault()
:Maybe it's a typo, but in MyMethod you need to actually call the function:
And when calling it, you're calling the function directly. Instead you need to pass a lambda expression. Also, you seem to be passing in a
Func<IEnumerable<int>>
; addSingle()
,SingleOrDefault()
,First()
orFirstOrDefault()
: