2008-11-25 81 views
4

我目前有一个ShoppingCart为我的客户的问题。在C中的两种不同类型的列表#

他希望能够在CartItems之间添加文本,所以我想知道是否还有一些方法仍然只有一个List。

我的解决方案是有两个列表,其中一个是在计算重量和购物车总体价格时迭代的IList类型,而另一个IList只显示在ListView中显示它所需的字段,这是一个CartItem的超类型。 (但是,如何访问listView的其他字段,在Description-Text-Class中将默认权重和价格默认为0将会中断LSP)。

但有两个列表感觉有点奇怪(但仍然给我的问题),所以我想知道如果我可以做某种类型的列表,我指定每个项目的类型。

欢迎任何建议,我对这两种选择都不满意。

回答

18

使用的接口:

ICartListItem 

,让您的列表是:

List<ICartListItem> 

现在,创建多种类型,有个个实现这个接口,你可以把它们全部安全地存储你的清单。

或者,如果您希望CartItem中存在某种默认逻辑,请使用基类而不是接口。

+0

嗨, 我曾经想过那种接口方法。但我认为我会违反LSP,因为CartListItem具有附加属性(重量,价格),而TextListItem只有文本。 但是现在我想起来这并不是什么大问题。 – Tigraine 2008-11-26 09:03:20

0

界面听起来像是过度杀伤。我只是将一个属性添加到当前名为“TextAfterItem”的CartItem中。

另请确保您的客户了解此功能在安全开销方面的成本。这听起来像是他们认为这应该是一个简单的更新,但是你允许用户输入将直接显示回页面的文本,这是一个危险的提议。

+0

downvote的原因是什么? – 2008-11-25 16:17:53

1

您可以创建一个类,并在其中定义所需列表类型的属性,然后创建一个相同类的列表。

例如,如果我想列出string s和bool s,我会在一个类中创建两个属性,然后创建该类的列表。