How do you concatenate Lists in C#?
If I have:
List<string> myList1;
List<string> myList2;
myList1 = getMeAList();
// Checked myList1, it contains 4 strings
myList2 = getMeAnotherList();
// Checked myList2, it contains 6 strings
myList1.Concat(myList2);
// Checked mylist1, it contains 4 strings... why?
I ran code similar to this in Visual Studio 2008 and set break points after each execution. After myList1 = getMeAList();
, myList1
contains four strings, and I pressed the plus button to make sure they weren't all nulls.
After myList2 = getMeAnotherList();
, myList2
contains six strings, and I checked to make sure they weren't null... After myList1.Concat(myList2);
myList1 contained only four strings. Why is that?
Solution 1:
Concat
returns a new sequence without modifying the original list. Try myList1.AddRange(myList2)
.
Solution 2:
Try this:
myList1 = myList1.Concat(myList2).ToList();
Concat returns an IEnumerable<T> that is the two lists put together, it doesn't modify either existing list. Also, since it returns an IEnumerable, if you want to assign it to a variable that is List<T>, you'll have to call ToList() on the IEnumerable<T> that is returned.
Solution 3:
targetList = list1.Concat(list2).ToList();
It's working fine I think so. As previously said, Concat returns a new sequence and while converting the result to List, it does the job perfectly.