2011-07-18 13 views
6

HttpSessionState wydaje się być typowym kluczem -> zbierania wartości, dlaczego więc nie implementuje interfejsu IDictionary?Dlaczego HttpSessionState nie implementuje IDictionary?

Tło: Próbuję wypisać/zapisać kontekst mojej witryny ASP.NET, gdy wystąpi błąd i chciał to zrobić z funkcją rekurencyjną, która wyświetla kolekcję i wszystkie zawierające kolekcje. Ponieważ HttpSessionState implementuje tylko ICollection i IEnumerable, tracę informacje o kluczach, jeśli chcę to zrobić w sposób ogólny (= praca z interfejsami).

Odpowiedz

7

IDictionary oznacza, że ​​cel jest zdolny kolekcja szybkich wyszukiwań przez klucz. (O ile mi wiadomo) HttpSessionState to tylko lista elementów, a nie struktura stylu słownika. Ponieważ wyszukiwanie tej struktury wymagałoby czasu linearnego, nie ma powodu, aby traktować ją jako słownik. Jeśli potrzebujesz wielu szybkich wyszukiwań, skopiuj klucze i wartości do prawdziwego słownika. Jeśli nie potrzebujesz szybkich wyszukiwań, musisz specjalizować się w tej klasie.

Interfejs zawiera więcej elementów niż tylko listę prototypów metod. Istnieją semantyki, które również należy zachować dla interfejsu. Szybkie wyszukiwanie według klucza jest jednym z takich nie jawnych założeń dla (większości) konsumentów dowolnej wersji IDictionary.

-1

Wystarczy pętli wartości jak tak Session Keys i odniesienia:

Session[key] 
+0

Hej, dziękuję za odpowiedź. Nie odpowiada mi jednak na moje pytanie. Nadal nie mogłem napisać ogólnej funkcji wyjścia, która działa również w innych przypadkach/kolekcjach. Musiałbym rzucić do HttpSessionState, aby to działało. – magnattic

+0

I nadal nie wyjaśnia, dlaczego zespół .NET zdecydował się nie korzystać z interfejsu tutaj. Jestem ciekawy. ;) – magnattic

2

Co powiesz na napisanie własnego wrappera obsługującego IDictionary, który pobiera obiekt HttpSessionState w swoim konstruktorze i zachowuje się jak chcesz? Zakładam, że chcesz to zrobić, aby wymieniać inne implementacje sesji typu nazwa-wartość (implementacja identyfikatora).

Oczywiście, jak wskazuje Billy, jest to świetny sposób na ubieranie słaby-pseudo-słownika w słownikowych ubraniach!

Powiązane problemy