Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表字典到(展平)列表_C#_Linq_Dictionary - Fatal编程技术网

C# 列表字典到(展平)列表

C# 列表字典到(展平)列表,c#,linq,dictionary,C#,Linq,Dictionary,我有一本类型的字典和一个MyClass类型的列表。现在,我想检查字典中是否有不包含在任何列表中的元素。我的第一种方法是嵌套两个循环(一个用于实际列表,一个用于字典中的列表)。如果找到一个项目,我可能会中断内部循环,并继续使用外部循环中的下一个元素 foreach (MyClass feature in features) { bool found = false; foreach (var kv in this._features) // this._features is t

我有一本
类型的字典和一个
MyClass
类型的列表。现在,我想检查字典中是否有不包含在任何列表中的元素。我的第一种方法是嵌套两个循环(一个用于实际列表,一个用于字典中的列表)。如果找到一个项目,我可能会中断内部循环,并继续使用外部循环中的下一个元素

foreach (MyClass feature in features)
{
    bool found = false;
    foreach (var kv in this._features)  // this._features is the dictionary
    {
        if (kv.Value.Contains(feature))
        {
            found = true;
            continue;
        }
    }
    if (!found) result.Add(feature);
}

到目前为止,这是可行的,但我更喜欢一种较短的方法,可能是使用LINQ。我认为如果我将字典的值平铺成一个列表,可能会奏效,但我不知道如何实现这一点

使用
选择many
将值展平为
IEnumerable
然后使用
Except
获取差异:

var differentElements = this._features.SelectMany(x => x.Value).Except(features);
result.AddRange(differentElements);

如果
MyClass
没有正确覆盖
Equals
GetHashCode
,这可能不会像预期的那样工作。

您可能可以使用Select()、SelectMany()和Where()来做一些事情,您可以分享您的尝试吗?为什么要缩短这个工作代码?哇,这似乎是我需要的。谢谢,我想我必须稍微改变一下表达式的顺序,因为我想从功能列表中选择那些不包含在字典中的元素,我想您编写它的方式会检查字典中不在列表中的元素。