c# - 比较通用列表并过滤不匹配的值

标签 c# asp.net

我想与通用列表进行比较,并过滤不匹配的值。我目前正在使用 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/

相关文章:

asp.net - ASP classic 在 Firefox 中读取 .NET cookie,但不能在 IE 中读取

c# - 设置事件窗口

c# - 如何在 Xamarin 中测试共享代码

c# - Asp.Net MVC,从数据库动态加载图像 - 图像闪烁

asp.net - 如何在回发时保留变量

c# - 您如何组织效用函数?

asp.net - 为什么我无法再调试我的 ASP.NET Web 项目?

c# - 同时学习 Objective-C 2.0 和 ASP.NET 4.0?

c# - 如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf

c# - C#中整数相减时错误 "Can' t implicitly convert int to short"