C# 将对象列表强制转换为另一个列表

C# 将对象列表强制转换为另一个列表,c#,.net,C#,.net,我有两个模型课: 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 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> 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?

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

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

这通常被称为向下转换,通常是代码中不正确层次结构的指示器,因此我建议限制其使用。

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

List<baseItem> baseList;
List<derivedItem> derivedList = baseList.Cast<derivedItem>();
这通常被称为向下投射,通常是代码中不正确层次结构的指示器,因此我建议限制其使用。

您需要将SalesItem更改为从ProductItem继承,然后可以使用LINQ,如下所示:

List<ProductItem> products;
IEnumerable<SalesItem> salesItems = products.Cast<SalesItem>();
您需要将SalesItem更改为从ProductItem继承,然后可以使用LINQ,如下所示:

List<ProductItem> products;
IEnumerable<SalesItem> salesItems = products.Cast<SalesItem>();
久经考验

包含命名空间

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类,则强制转换将起作用

包含命名空间

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类,则强制转换将起作用。在这里,您可以定义defaultQuantity的值,因为它在ProductItem中不存在


这里可以定义defaultQuantity的值,因为它不存在于ProductItem中


如何填写销售项目的数量ProductItem和SalesItem类是否相关(例如一个继承自另一个)?如果是,如何填写?如何填写销售项目的数量ProductItem和SalesItem类是否相关,例如一个类从另一个类继承?如果是,如何操作?除非在.Cast之后添加.ToList。问题是ProductItem inherit INotifyPropertyChanged。除非在.Cast之后添加.ToList,否则此操作不起作用。问题是ProductItem inherit INotifyPropertyChanged。除非在.Cast之后添加.ToList,否则此操作不起作用。除非在.Cast之后添加.ToList演员阵容。