1

我有两个模型类:

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

在您给出的示例中,您不能在这两种类型之间进行转换,因为它们彼此没有任何共同之处。正确的做法是创建一个baseItem类,然后创建一个derivedItem继承自baseItem. 然后你可以这样做:

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

这通常被称为downcasting,并且通常表明代码中的层次结构不正确,因此我建议限制其使用。

于 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 回答