kevindaub
kevindaub

Reputation: 3363

How can I convert a generic List<T> to a List?

How can I convert a generic List to a List?

I am using a ListCollectionView and I need to provide it with an IList not an IList<T>.

I see plenty of examples to convert an IList to a IList<T>, but not the other way.

Do I just convert it manually (new List().AddRange(IList<T>)?

Upvotes: 5

Views: 974

Answers (3)

Eric Lippert
Eric Lippert

Reputation: 660453

To clarify the other answers:

IList<T> does not require an implementing type to also implement IList. IEnumerable<T> does require IEnumerable. We can get away with that with IEnumerable<T> because a sequence of T can always be treated as a sequence of objects. But a list of giraffes cannot be treated as a list of objects; you can add a tiger to a list of objects.

However, List<T> does unsafely implement IList. If you try to add a tiger to a List<Giraffe> by first casting it to IList, you'll get an exception.

So to answer the question: If all you have in hand is an IList<T>, you can speculatively cast it to IList with the "as" operator, and if that fails, then create a new ArrayList or List<object> and copy the contents in. If what you have in hand is a List<T> then you already have something that implements IList directly.

Upvotes: 10

Guffa
Guffa

Reputation: 700730

You don't have to do any conversion at all. A List<T> implements the IList interface.

If you need the type IList for example to use a specific overload, just use the cast syntax (IList)theList.

Upvotes: 2

Femaref
Femaref

Reputation: 61497

As List<T> implements the IList interface, you can simply provide the List<T>. If needed, just cast it:

List<int> list = new List<int>();
IList ilist = (IList)list;

Upvotes: 9

Related Questions