How to Casting DataSource to List<T>?

Cristhian Boujon picture Cristhian Boujon · Jan 11, 2013 · Viewed 36k times · Source

I have the following method that load products on a DataGridView

private void LoadProducts(List<Product> products)
{
    Source.DataSource = products;  // Source is BindingSource
    ProductsDataGrid.DataSource = Source;
}

And now I'm trying to give me back to save them as shows below.

private void SaveAll()
{
   Repository repository = Repository.Instance;
   List<object> products = (List<object>)Source.DataSource; 
   Console.WriteLine("Este es el número {0}", products.Count);
   repository.SaveAll<Product>(products);
   notificacionLbl.Visible = false;
}

But I get an InvalidCastException on this line:

List<object> products = (List<object>)Source.DataSource;

So how can I cast the DataSource to an List?

Answer

Dave Bish picture Dave Bish · Jan 11, 2013

You can't cast covariantly directly to List;

Either:

List<Product> products = (List<Product>)Source.DataSource;

or:

List<Object> products = ((List<Product>)Source.DataSource).Cast<object>().ToList();