为了账号安全,请及时绑定邮箱和手机立即绑定

Linq to object Multiple Where 短路评估

Linq to object Multiple Where 短路评估

C#
蓝山帝景 2022-06-12 16:20:09
当在 Linq to object 表达式中包含多个 Where 子句时,它们会像 && 运算符一样评估短路吗?含义将仅在条件 A 返回 true 时评估条件 B例如collection.Where(condition1).Where(condition2)(不谈论即使使用 && 运算符short-circuiting-in-linq-where也不会这样做的 Linq to sql )
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

让我们再看一些代码。我们将测试这两种情况:

  1. 首先,我们将使用两个 if 语句来测试 &&

  2. 我们将使用两个 Where 调用

所以:

var elements = new List<string>(new[] { "A", "B", "C" });


Console.WriteLine("C#'s &&");


elements.Where(x => {

    if (x == "A")

    {

        Console.WriteLine("ConditionA is true");

        if (1 == 1)

        {

            Console.WriteLine("ConditionB is true");

            return true;

        }


        Console.WriteLine("ConditionB is false");

    }


    Console.WriteLine("ConditionA is false");


    return false;           

}).ToList();


Console.WriteLine();

Console.WriteLine("Double Linq.Where");


elements.Where(x => {

    if (x == "A")

    {

        Console.WriteLine("ConditionA is true");

        return true;

    }


    Console.WriteLine("ConditionA is false");

    return false;           

})

    .Where(x => {

        if (1 == 1)

        {

            Console.WriteLine("ConditionB is true");

            return true;

        }


        Console.WriteLine("ConditionB is false");

        return false;

    }).ToList();

结果如下:


C#'s &&

ConditionA is true

ConditionB is true

ConditionA is false

ConditionA is false


Double Linq.Where

ConditionA is true

ConditionB is true

ConditionA is false

ConditionA is false

正如你所看到的,它是一样的。未通过 ConditionA 的元素不会针对 ConditionB 进行测试。

你可以在这里试试这个:https ://dotnetfiddle.net/vals2r


查看完整回答
反对 回复 2022-06-12
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号