c# – LINQ Where()单管或双管/&符号

前端之家收集整理的这篇文章主要介绍了c# – LINQ Where()单管或双管/&符号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都在评论我们是否应该使用“我”或“II”和“&”或“&&”在我们的LINQ Where()扩展/查询?与LINQ to sql有什么区别?由此产生的表达树比星期五下午我的大脑还要多

谢谢,

static void Main(string[] args)
{
    var numbers = new int[] { 1,2,3,4,5,6,7,8,9 };

    var q1 = numbers.Where(i => i == 1 | i == 2);
    var q2 = numbers.Where(i => i == 1 || i == 2);

    var q3 = numbers.Where(i => i == 1 & i < 3);
    var q4 = numbers.Where(i => i == 1 && i < 3);

    Write(q1);
    Write(q2);
    Write(q3);
    Write(q4);
}

static void Write<T>(IEnumerable<T> t)
{
    foreach (var i in t)
        Console.Write("{0} ",i);

    Console.WriteLine();
}


Results:

    1 2
    1 2
    1
    1

解决方法

你想要|| /&&.

那么,单管(| /&)通常用于逐位算术,并且(除了其他问题之外)可能使代码库更难理解;它可以在LINQ-to-Objects中工作(因为按位仍然为bool定义),但没有通常的短路.但是如果你的数据源是一个数据库(即混合中有一个表达式解析器),你可能会发现它会爆炸.

好;按位可能会产生误导;但是||和&&仍然是表达意图的最合乎逻辑和预期的方式.我为任何困惑道歉.

猜你在找的C#相关文章