2011-07-18 3 views
6

HttpSessionStateは典型的なキー - 値コレクションのようですが、なぜそれがIDictionary -Interfaceを実装していないのですか?なぜHttpSessionStateはIDictionaryを実装していないのですか?

背景:エラーが発生したときに私のASP.NETウェブサイトのコンテキストを出力/保存しようとしています。再帰関数でこれを行い、コレクションとすべてのコレクションを出力します。 HttpSessionStateICollectionIEnumerableしか実装していないため、一般的な方法で(インターフェイスで作業して)行う場合は、キーに関する情報が失われています。そのようなSession Keysと参照値を通じて

答えて

7

IDictionaryは、ターゲットコレクションがキーによる迅速な検索が可能であることを意味します。 (私が知っている限り)HttpSessionStateは辞書スタイルの構造ではなく、項目のリストです。その構造の検索は線形時間を要するので、それを辞書として扱う理由はない。多くのクイックルックアップが必要な場合は、キーと値を真の辞書にコピーします。クイックルックアップが必要ない場合は、そのクラスを専門にする必要があります。

メソッドのプロトタイプの一覧だけでなく、インターフェイスにはもっと多くのことがあります。インタフェースのために保存する必要があるセマンティクスもあります。キーによるクイックルックアップは、いずれのIDictionaryの(ほとんどの)消費者にとっての非明示的な仮定の1つです。

-1

だけループ:

Session[key] 
+0

お返事ありがとうございます。しかし、私の質問には答えません。私はまだ出力のための一般的な関数を書くことができませんでした、それは他のケース/コレクションでも機能します。この作業を行うには、HttpSessionStateにキャストする必要があります。 – magnattic

+0

それでも、.NETチームがここでインターフェイスを使用しない理由を説明していません。私は興味がある。 ;) – magnattic

2

HttpSessionStateオブジェクトをそのコンストラクタに入れ、あなたが望むように振る舞う独自のIDictionary実装ラッパーを書くのはどうですか?私はあなたがこれをやりたいと思っていますので、他の種類の名前 - 値(IDictionary実装の)セッション実装を取り替えることができます。

もちろん、ビリーは指摘しているように、これは辞書の服で不良な擬似辞書を服用するのに最適な方法です!

関連する問題