先看看调试时的情况,发现QueryString的实际类型是System.Web.HttpValueCollection,该类型继承自NameObjectCollectionBase,跟NameValueCollection的基类是一样的。那么最有可能的就是QueryString直接继承了NameValueCollection,并且重写了ToString()的方法。
普通NameValueCollection的表现如下
根据以上判断基本为什么QueryString表面上看起来是NameValueCollection但又实际上表现出不同的ToString表现。
接下来继续了解一下System.Web.HttpValueCollection是何方神圣。该类用起来似乎很方便,也尝试在代码中使用,但提示找不到类。在MSDN中也没有明确该类的记录,可以基本判定为私有的类型或者受保护的。搜索之后发现,该类是的完整定义是System.Web.HttpValueCollection, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,只能通过反射的方式访问或修改该类型。因此想用这个类的话,基本上是比较麻烦,不太值得。但是在一般开发者眼中,都希望查询字符串的和NameValueCollection能很顺畅的进行呼唤,通过ToString()的简单方式就能获得。目前要实现两者的转换有以下方式
从查询字符串内容转换到NameValueCollection
HttpUtility.ParseQueryString(querystring);(参考http://msdn.microsoft.com/zh-cn/library/ms150046(v=VS.90).aspx),这种方式得到的就是正品QueryString,ToString()后为所实际的值。
从NameValueCollection转化的为查询字符串
只能遍历NameValueCollection,然后自个拼出一个查询字符串了
复制代码 代码如下:
foreach (string key in c.Keys)
{
sb.AppendFormat("{0}={1}", key, c[key]);
}
但实际上我们希望有更自然的方式,因为往往我们跟乐于操作可读写的NameValueCollection,而不是只读的QueryString。
老外对此也提出了意见,具体可参考
http://msmvps.com/blogs/paulomorgado/archive/2008/07/15/make-the-httpvaluecollection-class-public-and-move-it-to-system-dll.aspx
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]