繁体   English   中英

无法理解LINQ扩展方法

[英]Not able to understand LINQ extension methods

我无法解释以下声明:

var myResults = new List<bool>();
myResults.Add(this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc))));

我看了一下这篇分别解释Any和All的文章 但是我不太清楚如何解释嵌套的LINQ。

this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc)))如果myWorkers集合中的每个对象都显示在other Workers集合中,则返回true

你可以用循环重写这个表达式:

bool All = true;
foreach (var c in this.myWorkers)
{

    bool Any = false;
    foreach (var cc in other.Workers)
        if (c.Equals(cc))
        {
            Any = true;
            break;
        }

    if (!Any)
    {
        All = false;
        break;
    }
}

myResults.Add(All);

在列表myResults添加一个布尔值,指示myWorkers集合中的每个项目是否与其他other.Workers集合中的任何项目相等。


没有LINQ可以重写相同的代码:

var myResults = new List<bool>();
bool all = true;
foreach (var c in myWorkers)
{
    bool any = false;
    foreach (var cc in other.Workers)
    {
        if (c.Equals(cc))
        {
            any = true;
            break;
        }
    }
    if (!any)
    {
        all = false;
        break;
    }
}
myResults.Add(all);

这里我们使用方法语法(Lamda表达式)

Lamda表达与收藏有关。

myResults.Add(this.myWorkers.All(c => other.Workers.Any(cc => c.Equals(cc))));

这里

Add()方法用于将add元素添加到myResults集合中。 All()方法用于遍历集合的所有元素。 任何()方法用于匹配元素与条件(如果找到任何匹配)然后其跳过rremain元素。

如果集合中的任何元素与cc匹配,则表达式返回true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM