<p>I'm currently having a problem with a ShoppingCart for my customer.</p>

<p>He wants to be able to add Text between the CartItems so I was wondering if there is some way to still only have one List.</p>

<p>My solution would be to have two lists, one of type IList that gets iterated over when calculating Weight and overall Price of the Cart while having another IList that only exposes the necessary fields for displaying it in the ListView and that is a SuperType of CartItem. (But how do I then access additional fields for the listView, defaulting weight and price to 0 in the Description-Text-Class would break LSP).</p>

<p>But having two lists somehow feels a bit odd (and still gives me problems), so I was wondering if I could do some sort of a TypedList where I specify the Type of each item.</p>

<p>Any suggestions are welcome, I'm not really happy with both options.</p>

Use an interface:
```
```
ICartListItem
```
```
And make your list be:
```
```
List<ICartListItem>
```
```
Now, create several types, have all of them implement this interface, and you can store them all safely in your list.
Alternatively, if you want there to be some default logic in a CartItem, use a base class instead of an interface.