IList <keyvaluepair> vs IDictionary在WCF中作为[DataMember] </keyvaluepair>

时间:2010-11-04 03:09:36

标签: c# wcf list dictionary

我有一个必须使用WCF传递的字典数据结构。为此,我使用get和set方法创建了一个成员属性。我可以基本上实现相同的功能,这个属性是:

IDictionary<keyType, valueType>

IList<KeyValuePair<keyType, valueType>>

我认为没有理由选择其中一个。我能想到的一个温和的原因是:

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

有人能想出选择IList的理由吗?如果没有,我会选择IDictionary。

3 个答案:

答案 0 :(得分:4)

根据使用而非实施来设计界面。

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

以这种方式编写内部代码:)

答案 1 :(得分:0)

这取决于您的消费者。我会满足最可能的用例,并使他们的API尽可能简单。边缘情况总是可以通过Values集合迭代字典。

不要让他们想一想。如果术语词典是他们认为操作的结果,那么带名字的类型是一个非常有用的东西。

答案 2 :(得分:0)

如果keyValuePairs的集合需要唯一键,则可以使用字典。 如果相同的密钥可以出现在多个keyValuePair中,请使用Ilist / ienumerable。