2008-11-25 4 views
4

У меня возникла проблема с ShoppingCart для моего клиента.Список двух разных типов в C#

Он хочет иметь возможность добавлять текст между CartItems, поэтому мне было интересно, есть ли способ сохранить только один список.

Мое решение состояло бы в том, чтобы иметь два списка, один из типов IList, который перебирается при вычислении веса и общей цены на корзину, имея еще один IList, который предоставляет только необходимые поля для его отображения в ListView, и это SuperType of CartItem. (Но как мне получить доступ к дополнительным полям для listView, по умолчанию вес и цена до 0 в Description-Text-Class нарушат LSP).

Но наличие двух списков как-то немного странно (и все еще вызывает у меня проблемы), поэтому мне было интересно, могу ли я сделать какой-то TypedList, где я указываю Тип каждого элемента.

Любые предложения приветствуются, я не очень доволен обоими вариантами.

ответ

18

Используйте интерфейс:

ICartListItem 

И сделать ваш список будет:

List<ICartListItem> 

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

В качестве альтернативы, если вы хотите, чтобы в CartItem была какая-то логика по умолчанию, используйте базовый класс вместо интерфейса.

+0

Привет, Я уже думал об этом интерфейсном подходе. Но я думал, что нарушу LSP, потому что у CartListItem есть дополнительные свойства (вес, цена), в то время как TextListItem имеет только текст. Но теперь это не такая уж большая проблема, что я думаю об этом. – Tigraine 2008-11-26 09:03:20

0

Интерфейс звучит как перебор. Я бы просто добавил свойство к вашему текущему CartItem с именем «TextAfterItem».

Также: убедитесь, что ваш клиент понимает стоимость этой функции с точки зрения накладных расходов на безопасность. Похоже, они считают, что это должно быть простое обновление, но вы разрешаете пользователям вводить текст, который будет отображаться непосредственно на странице, и это опасное предложение.

+0

Причина для downvote? – 2008-11-25 16:17:53

1

Вы можете создать класс и, внутри этого, определить свойства требуемого типа списка и затем составить список одного и того же класса.

Например, если бы я хотел составить список string s и bool s, я бы сделал два свойства в одном классе, а затем сделал список этого класса.

Смежные вопросы