IList <KeyValuePair>против IDictionary для использования в качестве [DataMember] в WCF - PullRequest
1 голос
/ 04 ноября 2010

У меня есть словарная структура данных, которую нужно передать с помощью WCF.Для этого я создал свойство члена с методами get и set.В принципе, я могу достичь той же функциональности, с этим свойством, являющимся либо:

IDictionary<keyType, valueType>

, либо

IList<KeyValuePair<keyType, valueType>>

Я не вижу веской причины для выбора одного над другим.Я могу придумать одну легкую причину:

IDictionary - Люди, читающие код, подумают, что IDictionary имеет больше смысла, поскольку структура данных представляет собой словарь, но с точки зрения того, что передается через WCF, они всеТо же самое.

Кто-нибудь может подумать о причине выбора IList?Если их нет, я просто пойду с IDictionary.

Ответы [ 3 ]

4 голосов
/ 04 ноября 2010

Проектируйте свои интерфейсы на основе использования, а не реализации.

Если потребителю класса необходимо выполнить итерацию по всему набору, используйте IEnumerable.Если они должны иметь возможность изменить результат и получить доступ на основе индекса, верните IList.Если им нужны определенные элементы, и есть единственное полезное значение ключа, верните IDictionary.

Также напишите свой внутренний код:)

0 голосов
/ 01 мая 2012

Если коллекция keyValuePairs ожидает уникальный ключ, вы можете использовать словарь.Если один и тот же ключ может появляться в нескольких keyValuePair, используйте Ilist / ienumerable.

0 голосов
/ 04 ноября 2010

Это зависит от ваших потребителей.Я бы учел наиболее вероятный вариант использования и сделал бы их API максимально простым.Крайние случаи всегда могут перебирать словарь через коллекцию значений.

Не заставляйте их думать об этом.Если термин «словарь» - это то, о чем они думают как результат операции, и тогда тип с именем - это очень полезная вещь для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...