如何将DataSource转换为List ?

我有以下方法在DataGridView上加载产品

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

而现在我正试图让我回来保存它们,如下图所示。

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

但是我在这一行得到了一个InvalidCastException

 List products = (List)Source.DataSource; 

那么如何将DataSource转换为List呢?

你不能直接向List施放;

或者:

 List products = (List)Source.DataSource; 

要么:

 List products = ((List)Source.DataSource).Cast().ToList(); 

那么如何将DataSource转换为List呢?

你有很多选择

 var products = (List)Source.DataSource; // products if of type List 

要么

  List products = ((IEnumerable)Source.DataSource).Cast().ToList(); 

要么

 List products = ((IEnumerable)Source.DataSource).OfType().ToList(); 

要么

 List products = new List(); ((IEnumerable)Source.DataSource).AsEnumerable().ToList().ForEach( x => products.Add( (object)x)); 

您的列表是List类型,它与List 。 尝试强制转换为List

解开答案这是我的解决方案:

 private void SaveAll() { Repository repository = Repository.Instance; List products = (List)Source.DataSource; IEnumerable objects = products.Cast(); repository.SaveAll(objects.ToList()); notificacionLbl.Visible = false; } 

我接受建设性的批评。