我有两个清单:
List<string> _list1;
List<string> _list2;
Run Code Online (Sandbox Code Playgroud)
我需要在_list1上添加所有_list2不同的项目...
我怎么能用LINQ做到这一点?
谢谢
Jus*_*ner 11
你会使用这个IEnumerable<T>.Union
方法:
var _list1 = new List<string>(new[] { "one", "two", "three", "four" });
var _list2 = new List<string>(new[] { "three", "four", "five" });
_list1 = _list1.Union(_list2);
// _distinctItems now contains one, two, three, four, five
Run Code Online (Sandbox Code Playgroud)
编辑
您还可以使用其他帖子使用的方法:
_list1.AddRange(_list2.Where(i => !_list1.Contains(i));
Run Code Online (Sandbox Code Playgroud)
这两种方法都会增加开销.
第一种方法使用新的List来存储Union结果(然后将它们分配回来_list1
).
第二种方法是创建Where的内存表示,然后将它们添加到原始List.
选择你的毒药.在我看来,Union使代码更加清晰(因此值得增加开销,至少在你能证明它成为一个问题之前).
// Add all items from list2 except those already in list1
list1.AddRange(list2.Except(list1));
Run Code Online (Sandbox Code Playgroud)
_list1.AddRange( _list2.Where(x => !_list1.Contains(x) ) );
Run Code Online (Sandbox Code Playgroud)