我有两个模型类:
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?
答案 0 :(得分:2)
在您给出的示例中,您无法在这两种类型之间进行转换,因为它们彼此之间没有任何共同之处。正确的做法是拥有一个baseItem
类,然后是一个继承自derivedItem
的{{1}}类。然后你可以这样做:
baseItem
这通常被称为向下转换,并且通常是代码中不正确层次结构的指示器,因此我建议限制其使用。
答案 1 :(得分: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类继承,则转换将起作用
答案 2 :(得分:1)
您需要将SalesItem
更改为继承自ProductItem
,然后您可以使用LINQ,如下所示:
List<ProductItem> products;
IEnumerable<SalesItem> salesItems = products.Cast<SalesItem>();
或
List<SalesItem> salesItems = products.Cast<SalesItem>().ToList();
不要忘记确保文件中包含以下内容,以便Cast
扩展方法可用:
using System.Linq;
答案 3 :(得分:1)
您可以在此处定义defaultQuantity
的值,因为它ProductItem
中不存在。
List<SalesItem> sales = products.ConvertAll(x => new SalesItem() {
ProductName = x.ProductName,
Quantity = defaultQuantity,
UnitPrice = x.UnitPrice
});