Почему HttpSessionState не реализует IDictionary? - PullRequest
6 голосов
/ 18 июля 2011

HttpSessionState представляется типичным ключом -> коллекцией значений, так почему же он не реализует IDictionary -Interface?

Справочная информация. Я пытаюсь вывести / сохранить контекст моего веб-сайта ASP.NET, когда происходит ошибка, и хотел сделать это с помощью рекурсивной функции, которая выводит коллекцию и все содержащие коллекции. Поскольку HttpSessionState реализует только ICollection и IEnumerable, я теряю информацию о ключах, если хочу сделать это в общем виде (= работа с интерфейсами).

Ответы [ 3 ]

7 голосов
/ 18 июля 2011

IDictionary означает, что целевая коллекция способна к быстрому поиску по ключу.(Насколько я знаю) HttpSessionState это просто список элементов, а не структура словарного стиля.Поскольку поиск этой структуры занимал бы линейное время, нет смысла рассматривать его как словарь.Если вам нужно много быстрых поисков, скопируйте ключи и значения в настоящий словарь.Если вам не нужны быстрые поиски, вам просто нужно специализироваться для этого класса.

В интерфейсе есть больше вещей, чем просто список прототипов методов.Есть семантика, которую нужно сохранить и для интерфейса.Быстрый поиск по ключу - одно из таких неявных предположений для (большинства) потребителей любого IDictionary.

2 голосов
/ 18 июля 2011

Как насчет написания вашей собственной оболочки, реализующей IDictionary, которая принимает объект HttpSessionState в своем конструкторе и ведет себя так, как вы хотите? Я предполагаю, что вы хотите сделать это, чтобы вы могли поменять другие виды реализаций сеанса имя-значение (реализация IDictionary).

Конечно, как указывает Билли, это отличный способ одеть неэффективный псевдо-словарь в словарную одежду!

0 голосов
/ 18 июля 2011

Просто переберите Session Keys и опорные значения, например, так:

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