Converting from IEnumerable to List [duplicate]

I want to convert from IEnumerable<Contact> to List<Contact>. How can I do this?

0

5 Answers

You can do this very simply using LINQ.

Make sure this using is at the top of your C# file:

using System.Linq; 

Then use the ToList extension method.

Example:

IEnumerable<int> enumerable = Enumerable.Range(1, 300); List<int> asList = enumerable.ToList(); 
4

In case you're working with a regular old System.Collections.IEnumerable instead of IEnumerable<T> you can use enumerable.Cast<object>().ToList()

0

If you're using an implementation of System.Collections.IEnumerable you can do like following to convert it to a List. The following uses Enumerable.Cast method to convert IEnumberable to a Generic List.

//ArrayList Implements IEnumerable interface ArrayList _provinces = new System.Collections.ArrayList(); _provinces.Add("Western"); _provinces.Add("Eastern"); List<string> provinces = _provinces.Cast<string>().ToList(); 

If you're using Generic version IEnumerable<T>, The conversion is straight forward. Since both are generics, you can do like below,

IEnumerable<int> values = Enumerable.Range(1, 10); List<int> valueList = values.ToList(); 

But if the IEnumerable is null, when you try to convert it to a List, you'll get ArgumentNullException saying Value cannot be null.

IEnumerable<int> values2 = null; List<int> valueList2 = values2.ToList(); 

enter image description here

Therefore as mentioned in the other answer, remember to do a null check before converting it to a List.

another way

List<int> list=new List<int>(); IEnumerable<int> enumerable =Enumerable.Range(1, 300); foreach (var item in enumerable ) { list.add(item); } 
1

I use an extension method for this. My extension method first checks to see if the enumeration is null and if so creates an empty list. This allows you to do a foreach on it without explicitly having to check for null.

Here is a very contrived example:

IEnumerable<string> stringEnumerable = null; StringBuilder csv = new StringBuilder(); stringEnumerable.ToNonNullList().ForEach(str=> csv.Append(str).Append(",")); 

Here is the extension method:

public static List<T> ToNonNullList<T>(this IEnumerable<T> obj) { return obj == null ? new List<T>() : obj.ToList(); } 

You Might Also Like