请求之间的区别 QueryString和general NameValueCollection
在检查了QueryString的定义类型是NameValueCollection之后,我错误地认为这是NameValueCollection的一个重写为String()的方法,所以我可以安全地将代码转移到业务逻辑层。因为必须重构查询参数,所以重构了一个名称值集合,并且将ToString()的结果视为Key。但是实际操作后发现每次结果都是一样的,这是第一次查询结果。调试后发现NameValueCollection的ToString()方法不重复,或者说“系统。将返回collections . specialized . NameValueCollection”。先看调试情况,我们发现QueryString的实际类型是System。Web.HttpValueCollection,它继承自NameObjectCollectionBase,与NameValueCollection的基类相同。最有可能的是,QueryString直接继承了NameValueCollection,重写了ToString()的方法。
普通NameValueCollection显示如下。
根据上面的判断,基本上为什么QueryString表面上看起来是NameValueCollection,实际上却表现出不同的ToString性能。接下来,让我们继续了解who System。Web.HttpValueCollection为。这个类好像用起来很方便,我试着在代码中使用,但是提示我找不到这个类。这个阶层在MSDN没有明确的记载,基本上可以判断为私人或受保护。搜索后发现这个类的完整定义是系统。web.httpvaluecollection,system。web,版本=2.0.0.0,区域性=中性,public keytoken=b03f5f7f11d50a,只能通过反射访问或修改。所以,如果要用这个类,基本上比较麻烦,不值得。但是在一般的开发人员眼里,都希望查询字符串和NameValueCollection能够顺利调用,这可以通过ToString()的简单方式来获得。目前实现它们之间的转换有以下几种方式:从查询字符串内容到namevalucollectionhtpussability . parse query string(query string);(参考http://mdsn.microsoft.com/zh-cn/library/ms150046(v=vs . 90)。aspx),真正的querystring就是这样得到的,实际值在tostring()之后。从名称值集合转换的查询字符串只能遍历名称值集合,然后查询字符串会自己拼写出来。复制代码如下: foreach(c . keys中的字符串键){sb.appendformat ('{0}={1} ',key,c[key]);}但实际上,我们希望有一种更自然的方式,因为我们总是愿意操作可读的NameValueCollection,而不是只读的QueryString。外国人对此也提出了自己的看法。详情请参阅http://msmvps.com/blogs/paulomolgado/archive/2008/07/15/make-the-httpvalueecolection-class-public-and-move-it-to-system-dll . aspx。
版权声明:请求之间的区别 QueryString和general NameValueCollection是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。