session["foo"] = 1; session["Foo"] = 2; Trace.Write(session["foo"].ToString()); // => 2
这个行为似乎没有文档,所以我想知道它是否只是底层会话存储机制的副作用,或者是由类本身有意实现的。
由于C#将所有其他内容都视为区分大小写,所以对于会话来说,这不是一样的。是什么赋予了?商店类型有差异吗?有没有与VB的向后兼容?
解决方法
QueryString,Cookies等对象和其他类似于Classic-ASP的内置对象都是相同的不区分大小写的关键字。
ASP.NET正在设计时,我正在微软的IIS团队工作,ASP.NET尽可能地将ASP.NET代码向后兼容到ASP。这并不意味着ASP.NET具有完美的向后兼容性,但每当一个决定出现(像这种区分大小写)时,默认的答案就是匹配经典ASP行为,除非有一个很好的理由。
也就是说,我同意会议的案例不敏感性可以更好地记录在案。
BTW,ASP.NET会话集合从NameObjectCollectionBase获取其案例行为,它是Cookie,会话状态,应用程序状态,标题等的所有ASP.NET内置对象的基类。从文档:
The underlying structure for this
class is a hash table.Each element is a key/value pair.
The capacity of a
NameObjectCollectionBase is the number
of elements the
NameObjectCollectionBase can hold. As
elements are added to a
NameObjectCollectionBase,the capacity
is automatically increased as required
through reallocation.The hash code provider dispenses hash
codes for keys in the
NameObjectCollectionBase instance. The
default hash code provider is the
CaseInsensitiveHashCodeProvider.The comparer determines whether two
keys are equal. The default comparer
is the CaseInsensitiveComparer.In .NET Framework version 1.0,this
class uses culture-sensitive string
comparisons. However,in .NET
Framework version 1.1 and later,this
class uses
CultureInfo..::.InvariantCulture when
comparing strings. For more
information about how culture affects
comparisons and sorting,see Comparing
and Sorting Data for a Specific
Culture Comparing and Sorting Data for
a Specific Cultureand Performing
Culture-Insensitive String Operations.
一个合理的后续问题是:为什么经典的ASP设计具有不区分大小写的键?这样做的原因是,在1996年(或周围),ASP使用的主要语言是VBScript,所以有意义的是满足对VB开发人员的不区分大小写的期望。