我想与通用列表进行比较,并过滤不匹配的值。我目前正在使用 foreach 循环,但我想知道是否有办法使用 lambda 表达式来解决这个问题?在下面的示例中,我想要一个仅包含“4”的结果列表。
List<string> foo = new List<string>() { "1", "2", "3" };
List<string> bar = new List<string>() { "1", "2", "3", "4" };
最佳答案
使用 Linq Except<>
扩展名:
var result = bar.Except(foo);
在内部,这会添加所有 foo
进入Set<>
(内部 .Net 类型类似于 HashSet<T>
),然后从 bar
生成所有这些项目已成功添加。
注意 - 如果您需要不区分大小写的比较,您可以传递特定的 StringComparer
:
var result = bar.Except(foo, StringComparer.OrdinalIgnoreCase);
结果是 IEnumerable<string>
并且,与许多其他 Linq 扩展方法一样,在使用 foreach
进行迭代之前不会开始执行任何操作。或通过调用 ToArray
来“实现”结果或ToList
或其他什么。
关于c# - 比较通用列表并过滤不匹配的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13375543/