Нужен совет о том, как лучше всего справиться с хранением / распаковкой разных типов в списке и что является более оптимальным в моем случае - PullRequest
1 голос
/ 28 марта 2012

Допустим, я хочу иметь возможность отображать разную логику представления для двух разных типов, оба являются элементами / продуктами магазина, которые будут использоваться в представлениях результатов поиска и т. Д. В конечном итоге я хотел бы, чтобы объекты были упорядочены в соответствии со свойством цены, которое оба есть, но, конечно, они по-прежнему являются разными типами, поэтому мне интересно, можно ли упорядочить разные типы объектов в списке, используя для каждого значение свойства одного и того же типа?

У меня есть 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> по их десятичному типу, указанному в свойстве price.

Также еще один грубый способ сделать это, я думаю, это.

public class StoreItem
{
public Product product {get; set;}

public ProductCombo productCombo {get; set;}

public double itemPrice {get; set;} 

}

А потом просто хранить в List<StoreItem> установка itemPrice при выполнении foreach на каждый объект возвращается из базы данных.

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

Почему бы не сделать что-то подобное

public interface IPricedItem
{
    double Price { get; }
}

class Product : IPricedItem { ... }
class ProductCombo : IPricedItem { ... }

public class Whatever
{
    public List<IPricedItem> StoreItems { get; set; }
}
3 голосов
/ 28 марта 2012

У вас должен быть интерфейс с методами для всех функций, общих для этих двух объектов, и должен быть список, напечатанный для этого интерфейса. Интерфейс, вероятно, должен расширяться сопоставимо, чтобы у них был метод сравнения, сравнивающий себя с другим экземпляром интерфейса.

3 голосов
/ 28 марта 2012

Я предлагаю добавить общий интерфейс для двух типов. Затем вы можете определить все общие свойства интерфейса для поддержки сортировки и т. Д.

List<IProduct> будет вашей единственной коллекцией.

...