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<Product> products = (List<Product>)Source.DataSource;
または:
List<Object> products = ((List<Product>)Source.DataSource).Cast<object>().ToList();
では、どうすれば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));
リストのタイプはList<Product>
であり、List<object>
とは異なります。 List<Product>
にキャストしてみてください
答えを納得させるこれは私の解決策です:
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;
}
私は建設的な批判を受け入れます。