我有一个必须使用WCF传递的字典数据结构。为此,我使用get和set方法创建了一个成员属性。我可以基本上实现相同的功能,这个属性是:
IDictionary<keyType, valueType>
或
IList<KeyValuePair<keyType, valueType>>
我认为没有理由选择其中一个。我能想到的一个温和的原因是:
IDictionary - 阅读代码的人会认为IDictionary更有意义,因为数据结构是字典,但就通过WCF传递的内容而言,它们都是相同的。
有人能想出选择IList的理由吗?如果没有,我会选择IDictionary。
答案 0 :(得分:4)
根据使用而非实施来设计界面。
如果类的使用者需要遍历整个集合,请使用IEnumerable
。如果他们应该能够修改结果并需要基于索引的访问权限,请返回IList
。如果他们想要特定的项目,并且只有一个有用的键值,请返回IDictionary
。
以这种方式编写内部代码:)
答案 1 :(得分:0)
这取决于您的消费者。我会满足最可能的用例,并使他们的API尽可能简单。边缘情况总是可以通过Values集合迭代字典。
不要让他们想一想。如果术语词典是他们认为操作的结果,那么带名字的类型是一个非常有用的东西。
答案 2 :(得分:0)
如果keyValuePairs的集合需要唯一键,则可以使用字典。 如果相同的密钥可以出现在多个keyValuePair中,请使用Ilist / ienumerable。