HttpSessionStateのキーは、従来のASPセッションオブジェクトの動作と一致するように大文字と小文字を区別しないように作成されました。これにより、開発者は、大文字と小文字を区別する微妙な問題を発生させることなく、ASPアプリケーションをASP.NETに簡単に移植できます。
同じ大文字と小文字を区別しないキーの動作は、QueryString、Cookieなどのオブジェクト、およびその他のClassic-ASP組み込みオブジェクトにも当てはまります。
ASP.NETが設計されていたとき、私はMicrosoftのIISチームに所属していましたが、ASP.NETは、可能な限りASP.NETコードとASPの下位互換性を維持するために懸命に働きました。これは、ASP.NETに完全な逆互換性があることを意味するわけではありませんが、決定が下されたときはいつでも(この大文字と小文字を区別するもののように)、デフォルトの答えは、正当な理由がない限り、クラシックASPの動作と一致することでした。
そうは言っても、Sessionの大文字と小文字を区別しないことをより適切に文書化できることに同意します。
ところで、ASP.NETセッションコレクションは、Cookie、セッション状態、アプリケーション状態、ヘッダーなどのすべてのASP.NET組み込みオブジェクトの基本クラスであるNameObjectCollectionBaseからケースの動作を取得します。ドキュメントから:
このクラスの基礎となる構造はハッシュテーブルです。
各要素はキーと値のペアです。
NameObjectCollectionBaseの容量は、NameObjectCollectionBaseが保持できる要素の数です。NameObjectCollectionBaseに要素が追加されると、再割り当てによって必要に応じて容量が自動的に増加します。
ハッシュコードプロバイダーは、NameObjectCollectionBaseインスタンスのキーのハッシュコードをディスペンスします。デフォルトのハッシュコードプロバイダーはCaseInsensitiveHashCodeProviderです。
比較者は、2つのキーが等しいかどうかを判断します。デフォルトの比較対象はCaseInsensitiveComparerです。
.NET Frameworkバージョン1.0では、このクラスはカルチャに依存する文字列比較を使用します。ただし、.NET Frameworkバージョン1.1以降では、このクラスは文字列を比較するときにCultureInfo..::。InvariantCultureを使用します。カルチャが比較とソートにどのように影響するかについての詳細は、特定のカルチャのデータの比較とソートおよび特定のカルチャのデータの比較とソートおよびカルチャに依存しない文字列操作の実行を参照してください。
妥当なフォローアップの質問は次のとおりです。従来のASPで大文字と小文字を区別しないキーを使用して設計されたのはなぜですか。この理由は、1996年(またはその前後)にASPで使用された主な言語がVBScriptであったため、VB開発者の大文字と小文字を区別しない期待に応えることが理にかなっているためです。