需要关于如何最好地处理列表中不同类型的存储/取消装箱的建议,以及在我的情况下什么更优化

本文关键字:取消装箱 优化 什么 情况下 我的 存储 于如何 处理 同类型 列表 | 更新日期: 2023-09-27 18:29:17

假设我希望能够为两种不同的类型呈现不同的视图逻辑,这两种类型都是将在搜索结果视图等中使用的商店项目/产品,但当然,它们仍然是不同的类型,所以我想知道是否可以通过对每个对象使用相同类型的属性值来对列表中的不同对象类型进行排序?

我有一个Product类型和ProductCombo类型。

这样将它们存储在模型类中是否更优化(那时可能无法订购):

public class
{
public List<Product> ProductList {get; set;}
public List<ProductCombo> ProductComboList {get; set;}
}

public class
{
public List<object> StoreItems {get; set;}
}

如果我使用上面的第二个选项,我当然必须取消每个对象的框,获取类型,并决定在视图中对所述类型采取什么操作。我觉得这是我最好的选择?考虑到我想根据List<object>中的十进制类型价格属性对其进行排序。

另一个粗糙的方法是这样做,我猜。

public class StoreItem
{
public Product product {get; set;}
public ProductCombo productCombo {get; set;}
public double itemPrice {get; set;} 
}

然后直接存储在List<StoreItem>中在上执行foreach时设置itemPrice从数据库返回的每个对象。

需要关于如何最好地处理列表中不同类型的存储/取消装箱的建议,以及在我的情况下什么更优化

为什么不做这样的

public interface IPricedItem
{
    double Price { get; }
}
class Product : IPricedItem { ... }
class ProductCombo : IPricedItem { ... }
public class Whatever
{
    public List<IPricedItem> StoreItems { get; set; }
}

我建议为这两种类型添加一个通用接口。然后,您可以在界面上定义所有通用属性,以支持排序等。

List<IProduct>将是您唯一的收藏。

您应该有一个接口,该接口包含两个对象之间通用的所有功能的方法,并为该接口键入一个列表。接口可能应该扩展compatible,这样他们就可以使用compare方法将自己与接口的另一个实例进行比较。