在 C# 中传入匿名方法/函数作为参数

发布于 2024-11-04 13:21:50 字数 369 浏览 1 评论 0 原文

我有一个需要有条件地执行方法的方法,如下所示:

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));

我该如何执行此操作?

I have a method that needs to conditionally execute a method, something like this:

int MyMethod(Func<int> someFunction)
{
    if (_someConditionIsTrue)
    {
        return someFunction;
    }

    return 0;
}

I want to be able to pass a Linq query in to MyMethod as someFunction:

int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));

How do I do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞琼窗梦回ˉ 2024-11-11 13:21:50
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));

如您所见,我已将查询转换为 lambda。您必须这样做,因为否则,您的查询将在调用 MyMethod 之前执行(...并且会引入编译时错误;)),而不是在执行时执行。

附注:

这个return someFunction;应该是return someFunction();

int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));

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 be return someFunction();.

风为裳 2024-11-11 13:21:50

也许这是一个拼写错误,但在 MyMethod 中,您需要实际调用该函数:

        return someFunction();

并且在调用它时,您是直接调用该函数。相反,您需要传递 lambda 表达式。另外,您似乎传递了一个 Func>;添加 Single()SingleOrDefault()First()FirstOrDefault()

int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());

Maybe it's a typo, but in MyMethod you need to actually call the function:

        return someFunction();

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>>; add Single(), SingleOrDefault(), First() or FirstOrDefault():

int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文