Search code examples
c#genericsenumerator

Best way to convert a non-generic collection to generic collection


What is the best way to convert a non-generic collection to a generic collection? Is there a way to LINQ it?

I have the following code.

public class NonGenericCollection:CollectionBase
{
    public void Add(TestClass a)
    {
        List.Add(a);
    }
}

public class ConvertTest
{
    public static List<TestClass> ConvertToGenericClass( NonGenericCollection    collection)
    {
        // Ask for help here.
    }
}

Thanks!


Solution

  • Since you can guarantee they're all TestClass instances, use the LINQ Cast<T> method:

    public static List<TestClass> ConvertToGenericClass(NonGenericCollection collection)
    {
       return collection.Cast<TestClass>().ToList();
    }
    

    Edit: And if you just wanted the TestClass instances of a (possibly) heterogeneous collection, filter it with OfType<T>:

    public static List<TestClass> ConvertToGenericClass(NonGenericCollection collection)
    {
       return collection.OfType<TestClass>().ToList();
    }