Список двух разных типов в C # - PullRequest
4 голосов
/ 25 ноября 2008

У меня сейчас проблема с корзиной покупок для моего клиента.

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

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

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

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

Ответы [ 3 ]

18 голосов
/ 25 ноября 2008

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

 ICartListItem

И составьте ваш список:

 List<ICartListItem>

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

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

1 голос
/ 13 сентября 2012

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

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

0 голосов
/ 25 ноября 2008

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...