18

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 をリストにキャストするにはどうすればよいでしょうか。

4

4 に答える 4

24

共変的に直接リストにキャストすることはできません。

また:

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

また:

List<Object> products = ((List<Product>)Source.DataSource).Cast<object>().ToList();
于 2013-01-11T14:20:08.230 に答える
6

では、DataSource をリストにキャストするにはどうすればよいでしょうか。

あなたにはたくさんの選択肢があります

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));
于 2013-01-11T14:25:54.973 に答える
3

リストは、List<Product>とは異なるタイプList<object>です。にキャストしてみてくださいList<Product>

于 2013-01-11T14:19:29.160 に答える
0

答えを納得させるこれが私の解決策です:

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

私は建設的な批判を受け入れます。

于 2013-01-11T14:39:23.237 に答える