1

2つのモデルクラスがあります。

public class SalesItem
{
   public string ProductName { get; set; }
   public double UnitPrice { get; set; }
   public int Quantity { get; set; }
}

public class ProductItem : INotifyPropertyChanged
{
   public string ProductName { get; set; }
   public double UnitPrice { get; set; } 
}

SalesItemのリストがありますがList<ProductItem> products、どのようにキャストできますかList<SalesItem> sales


編集済み

List<ProductItem> salesList = new List<ProductItem>();
List<SalesItem> salesItem = salesList.Cast<SalesItem>();

エラー:

Connot implicitly convert type 'System.Collections.Generic.IEnumerable<Model.SalesItem>' to 'System.Collections.Generic.List<Model.SalesItem>'. An explicit conversion exists (are you missing a cast?
4

4 に答える 4

2

あなたが与えた例では、これらの2つのタイプの間には共通点がないため、キャストすることはできません。それを行う正しい方法は、クラスを作成してから、から継承baseItemするクラスを作成することです。次に、次のことができます。derivedItembaseItem

List<baseItem> baseList;
List<derivedItem> derivedList = baseList.Cast<derivedItem>();

これは通常、ダウンキャストと呼ばれ、コード内の不適切な階層を示すことが多いため、使用を制限することをお勧めします。

于 2012-10-17T00:54:22.670 に答える
2

試してテストしました

名前空間を含める

using System.Linq;

その後

List<ProductItem> yourProductlist = new List<ProductItem>();

yourProductlist.Add(new ProductItem() { ProductName = "A", UnitPrice = 50 });
yourProductlist.Add(new ProductItem() { ProductName = "B", UnitPrice = 150 });

List<SalesItem> yourSaleslist = yourProductlist.Select(x => 
                           new SalesItem() { ProductName = x.ProductName, 
                                             UnitPrice = x.UnitPrice }).ToList();

それが機能しているのを見る

ここに画像の説明を入力してください

ProductItemがSalesItemクラスから継承されている場合、キャストは機能します

于 2012-10-17T00:55:12.513 に答える
1

SalesItemから継承するように変更する必要がありProductItemます。その後、次のようにLINQを使用できます。

List<ProductItem> products;
IEnumerable<SalesItem> salesItems = products.Cast<SalesItem>();

また

List<SalesItem> salesItems = products.Cast<SalesItem>().ToList();

Cast拡張メソッドを使用できるようにするには、ファイルに次のものが含まれていることを確認することを忘れないでください。

using System.Linq;
于 2012-10-17T00:54:47.550 に答える
1

defaultQuantityここでは、の値がに存在しないため、の値を定義できますProductItem

List<SalesItem> sales = products.ConvertAll(x => new SalesItem() {
                            ProductName = x.ProductName,
                            Quantity = defaultQuantity, 
                            UnitPrice = x.UnitPrice  
                        });
于 2012-10-17T00:57:01.200 に答える