C# NameValueCollection.AllKeys.Contains始终返回false

C# NameValueCollection.AllKeys.Contains始终返回false,c#,namevaluecollection,C#,Namevaluecollection,总是返回false,但是 System.Web.HttpContext.Current.Request.Params.AllKeys.Contains(key) 返回键的值 有人能告诉我为什么会这样吗 在我的例子中,密钥是“ctl00$ContentPlaceholder 1$username”,我调试并检查了System.Web.HttpContext.Current.Request.Params.AllKeys和System.Web.HttpContext.Current.Request.

总是返回false,但是

System.Web.HttpContext.Current.Request.Params.AllKeys.Contains(key)
返回键的值

有人能告诉我为什么会这样吗


在我的例子中,密钥是“ctl00$ContentPlaceholder 1$username”,我调试并检查了System.Web.HttpContext.Current.Request.Params.AllKeys和System.Web.HttpContext.Current.Request.Params中是否存在确切的密钥。

Params
集合使用不区分大小写的字符串比较器初始化。当您使用
Contains
时,您没有提供任何比较器,因此您使用的是默认值,它将使用区分大小写的比较。

在我的例子中,键是“ctl00$ContentPlaceHolder1$username”,我选中了,它位于System.Web.HttpContext.Current.Request.Params中。AllKeys@user1149293再一次,看看我的答案。你的两个方法使用了两个不同的比较器,所以它们会产生不同的匹配。我还是不明白。你说的“不同的比较器”是否区分大小写。但在我的例子中,无论哪个比较器应该匹配键,不是吗?@user1149293您没有提供任何说明,不。鉴于您看到的行为,显然您的键和序列中的值在一个比较器上匹配,而不是在另一个比较器上匹配,因为一个比另一个更严格。谢谢你一次又一次地回答我的问题,我更新了一下我的问题。我仍然不明白,我认为Params.AllKeys和Params都应该找到密钥,无论使用什么比较方法,无论方法多么严格。你能给我举个例子吗,谢谢
System.Web.HttpContext.Current.Request.Params[key]