Возвращение словарей из методов - PullRequest
4 голосов
/ 17 июня 2011

Эти методы всегда беспокоили меня.Не копаясь в коде, я понятия не имею, какой ключ или подзначение должны быть в этом словаре.Я сделал это сам около тысячи раз, я уверен.Но это всегда беспокоило меня, потому что в нем не так много информации.

IDictionary<int,HashSet<int>> GetExportedCharges()
{
    ...
}

void GetVisitStatuses(IDictionary<int,HashSet<int>> exportedCharges)
{
    ...
}

Наличие материала в словаре имеет смысл, но все методы IDictionary имеют очень абстрактные параметры.Я полагаю, я мог бы создать новый класс, реализовать IDictionary и переименовать все параметры.Это просто кажется излишним.Жаль, что в c # не было директивы typdef.

Как избежать таких словарей?Или ты вообще этого избегаешь?

Ответы [ 2 ]

9 голосов
/ 17 июня 2011

Существует очень простое решение, которое вы можете найти адекватным:

public class IdToSetOfWidgetNumbersMap : Dictionary<int,HashSet<int>> { }

Преимущества:

  • Вид метода, возвращающего IdToSetOfWidgetNumbersMap, не оставляет много вопросов открытым
  • Класс может быть оставлен полностью пустым, или вы можете предоставить псевдонимы для участников, выставленных Dictionary, если вы предпочитаете

Недостаток:

  • Вам нужно создать класс бездействия для каждого типа словаря
0 голосов
/ 17 июня 2011

Лично я не избегаю возвращать словари.

Согласен, имея только сигнатуру метода, все выглядит очень расплывчато.Поэтому мое правило - ВСЕГДА писать комментарии в стиле «Словарь (логическое описание ключей) - (логическое описание значений)».И надеяться, что мне не нужно будет использовать что-то ужасное, как

Dictionary<SomeType, <Dictionary<...>>
...