Подтвердить что ты не робот

Как передать DataSource в список <T>?

У меня есть следующий метод загрузки продуктов в DataGridView

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

И теперь я пытаюсь вернуть меня, чтобы сохранить их, как показано ниже.

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;
}

Но я получаю InvalidCastException в этой строке:

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

Итак, как я могу передать DataSource в List?

4b9b3361

Ответ 1

Вы не можете бросать ковариантно непосредственно в List;

Или:

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

или

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

Ответ 2

Итак, как я могу передать DataSource в List?

У вас есть много вариантов

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

или

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

или

List<Object>  products = ((IEnumerable)Source.DataSource).OfType<object>().ToList();

или

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

Ответ 3

Ваш список ist типа List<Product>, который отличается от List<object>. Попробуйте применить к List<Product>

Ответ 4

Сопряжение ответов Это мое решение:

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

Я принимаю конструктивную критику.