2010-11-04 47 views
1

我有一个字典数据结构,必须使用WCF传递。为此,我使用get和set方法创建了一个成员属性。我可以basicly实现相同的功能,与此属性是无论是:IList <KeyValuePair>与IDictionary充当WCF中的[DataMember]

IDictionary<keyType, valueType> 

IList<KeyValuePair<keyType, valueType>> 

我可以看到选择一个比其他任何强有力的理由。我能想到的一个温和的重复是:

IDictionary - 阅读代码的人会认为IDictionary更有意义,因为数据结构是字典,但就通过WCF传递的内容而言,它们都是相同的。

任何人都可以想到选择IList的理由吗?如果没有,我只需要与IDictionary一起去。

回答

4

根据使用情况设计你的接口,而不是实现。

如果某个类的使用者需要遍历整个集合,请使用IEnumerable。如果他们应该能够修改结果并需要基于索引的访问,请返回IList。如果他们想要特定项目,并且有一个有用的键值,则返回IDictionary

编写的内部代码这样,太:)

+0

消费者是我自己的代码,唯一的属性是使WCF的数据结构可序列化。 getter setter所做的唯一事情就是枚举结构的成员,所以你可以选择IEnumerable看起来像最简单的东西,可以工作,这总是很好:-) – 2010-11-04 05:07:04

+0

@David:“该属性的唯一目的是使数据结构由WCF序列化“。我不能声称在没有看到代码的情况下完全理解你的场景,但是这听起来像你在设计中可能有一些混合的抽象层次,这导致这样的决定过于复杂。 – 2010-11-04 05:25:52

+0

你能评论一下吗? – 2010-11-04 07:04:40

0

这取决于你的消费者。我会迎合最可能的用例,尽可能简化API。边缘案例总是可以通过Values集合迭代字典。

不要让他们考虑一下。如果术语字典是他们将作为操作结果考虑的内容,那么带有名称的类型是非常有用的东西。

0

如果keyValuePairs收集预计独特的键,你可以使用字典。 如果同一个键可以出现在多个keyValuePair中,请使用Ilist/ienumerable。

相关问题