﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-asp.net/c# 民工天空</title><link>http://www.cnblogs.com/cnherman/</link><description>慢慢的,就会好的了

</description><language>zh-cn</language><lastBuildDate>Sat, 30 Aug 2008 06:53:25 GMT</lastBuildDate><pubDate>Sat, 30 Aug 2008 06:53:25 GMT</pubDate><ttl>60</ttl><item><title>C#和硬件驱动交互编程 --东进语音卡项目例子. </title><link>http://www.cnblogs.com/cnherman/archive/2008/07/15/1243476.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Tue, 15 Jul 2008 07:48:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/archive/2008/07/15/1243476.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1243476.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/archive/2008/07/15/1243476.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1243476.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1243476.html</trackback:ping><description><![CDATA[摘要: 最近公司的项目比较忙所以没及时更新第二篇.不要骂我是贴代码...在做这个项目的时候我发现一个问题,假如不是使用机器的内存,而是使用硬件的内存的时候,一定要手动Flush硬件的内存.我相信这个问题在做东进语音卡项目的时候很多人都会遇到.好,继续开贴...myTelNumCode highlighting produced by Actipro CodeHighlighter (freeware)ht&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/archive/2008/07/15/1243476.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1243476.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41965/" target="_blank">[新闻]美国年轻人最喜欢的15大网站</a>]]></description></item><item><title>C#和硬件驱动交互编程 --东进语音卡项目例子.</title><link>http://www.cnblogs.com/cnherman/archive/2008/07/08/1237937.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Tue, 08 Jul 2008 01:37:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/archive/2008/07/08/1237937.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1237937.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/archive/2008/07/08/1237937.html#Feedback</comments><slash:comments>19</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1237937.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1237937.html</trackback:ping><description><![CDATA[摘要: C# 和 驱动交互编程&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/archive/2008/07/08/1237937.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1237937.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41964/" target="_blank">[新闻]2008年8月30日IT博客精选</a>]]></description></item><item><title>javascript 无限级树形菜单.</title><link>http://www.cnblogs.com/cnherman/archive/2008/06/30/1232636.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Mon, 30 Jun 2008 09:50:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/archive/2008/06/30/1232636.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1232636.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/archive/2008/06/30/1232636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1232636.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1232636.html</trackback:ping><description><![CDATA[摘要: 很多的cms后台和shop后台的导航都很好看.不过有时候在添加删除的时候很麻烦.本人也苦于这样.嘿嘿本人不喜欢.net的treeview,总感觉静态的导航的话没有什么必要所以写了个树形.js代码:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1var&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/archive/2008/06/30/1232636.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1232636.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41963/" target="_blank">[新闻]《极品飞车12》最新真人照片、游戏截图</a>]]></description></item><item><title>Nunit--the TDD Great Tools.</title><link>http://www.cnblogs.com/cnherman/archive/2008/06/06/1215093.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Fri, 06 Jun 2008 05:05:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/archive/2008/06/06/1215093.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1215093.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/archive/2008/06/06/1215093.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1215093.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1215093.html</trackback:ping><description><![CDATA[<p>Those words is the Nunit-Console.exe`s help<br />
</p>
<fieldset><legend><font face="Verdana">NUnit</font> Help</legend>
<p><font face="Verdana">NUNIT-CONSOLE [inputfiles] [options]</font></p>
<p><font face="Verdana">Runs a set of NUnit tests from the console.</font></p>
<p><font face="Verdana">You may specify one or more assemblies or a single<br />
project file of type .nunit.</font></p>
<p><font face="Verdana">Options:<br />
/fixture=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fixture to test<br />
/config=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Project configuration to load<br />
/xml=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name of XML output file<br />
/transform=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name of transform file<br />
/xmlConsole&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Display XML to the console<br />
/output=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File to receive test output (Short format: /out=STR)<br />
/framework=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .NET Framework version to execute with (eg 'v1.0.3705')<br />
/err=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File to receive test error output<br />
/labels&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Label each test in stdOut<br />
/include=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List of categories to include<br />
/exclude=STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List of categories to exclude<br />
/domain=X&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AppDomain Usage for Tests<br />
/noshadow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disable shadow copy when running in separate domain<br />
/nothread&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Disable use of a separate thread for tests<br />
/wait&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Wait for input before closing console window<br />
/nologo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do not display the logo<br />
/nodots&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Do not display progress<br />
/help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Display help (Short format: /?)</font></p>
<p><font face="Verdana"><br />
Options that take values may use an equal sign, a colon<br />
or a space to separate the option from its value.</font></p>
</fieldset>
<p>as this helps we can use Nunit Test in Console Application.<br />
the Cammand is:<br />
<font face="Verdana">NUNIT-CONSOLE "Filepath of Test Unit" /fixture="Your Test Unit Class"<br />
</font></p>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1215093.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41962/" target="_blank">[新闻]IBM正在开发超强性能4TB固态硬盘阵列</a>]]></description></item><item><title>开始做开源项目</title><link>http://www.cnblogs.com/cnherman/articles/1208101.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Tue, 27 May 2008 01:16:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1208101.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1208101.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1208101.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1208101.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1208101.html</trackback:ping><description><![CDATA[很久以前就想做开源项目.<br />
但是没有很好的时间和很好的环境.<br />
现在,开始做了.<br />
<img src ="http://www.cnblogs.com/cnherman/aggbug/1208101.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41961/" target="_blank">[新闻]Microsoft F# CTP(2008年9月)</a>]]></description></item><item><title>简单实现ConfigurationManager.AppSettings[""]效果存储系统变量</title><link>http://www.cnblogs.com/cnherman/articles/1197061.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Wed, 14 May 2008 09:47:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1197061.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1197061.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1197061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1197061.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1197061.html</trackback:ping><description><![CDATA[摘要: 代码一:存储变量和常量的Class.CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4usingSystem.Col&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/articles/1197061.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1197061.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41960/" target="_blank">[新闻]微软4.86亿美元收购Greenfield</a>]]></description></item><item><title>abcPdf 用法</title><link>http://www.cnblogs.com/cnherman/articles/1187977.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Thu, 08 May 2008 02:45:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1187977.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1187977.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1187977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1187977.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1187977.html</trackback:ping><description><![CDATA[摘要: CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4usingWebSupergoo.ABCpdf5;56namesp&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/articles/1187977.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1187977.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41959/" target="_blank">[新闻]苹果已然取代微软地位成行业众矢之的</a>]]></description></item><item><title>Response.AddHeader使用实例收集</title><link>http://www.cnblogs.com/cnherman/articles/1154428.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Tue, 15 Apr 2008 06:54:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1154428.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1154428.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1154428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1154428.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1154428.html</trackback:ping><description><![CDATA[<p><strong>文件下载，指定默认名</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
Response.AddHeader("content-type","application/x-msdownload");<br />
Response.AddHeader("Content-Disposition","attachment;filename=要下载的文件名.rar");<br />
<br />
<strong>刷新页面</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
Response.AddHeader &#8220;REFRESH&#8221;, &#8221;60;URL=newpath/newpage.asp&#8221; <br />
这等同于客户机端&lt;META&gt;元素： <br />
&lt;META HTTP-EQUIV=&#8221;REFRESH&#8221;, &#8220;60;URL=newpath/newpage.asp&#8221; </p>
<p><strong>页面转向</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
Response.Status = &#8220;302 Object Moved&#8221; <br />
Response.Addheader &#8220;Location&#8221;, &#8220;newpath/newpage.asp&#8221; <br />
这等同于使用Response.Redirect方法： <br />
Response.Redirect &#8220;newpath/newpage.asp&#8221; </p>
<p><strong>强制浏览器显示一个用户名/口令对话框</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
Response.Status= &#8220;401 Unauthorized&#8221; <br />
Response.Addheader &#8220;WWW-Authenticate&#8221;, &#8220;BASIC&#8221; <br />
强制浏览器显示一个用户名/口令对话框，然后使用BASIC验证把它们发送回服务器（将在本书后续部分看到验证方法）。<br />
<br />
<strong>如何让网页不缓冲</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
Response.Expires = 0 <br />
Response.ExpiresAbsolute = Now() - 1 <br />
Response.Addheader "pragma","no-cache" <br />
Response.Addheader "cache-control","private" <br />
Response.CacheControl = "no-cache</p>
<p><br />
<br />
<br />
<br />
<br />
应用实例：文件下载<br />
<br />
<strong>做下载中文显示乱码怎么办</strong><a style="font-size: 1px; text-decoration: none" href="http://hi.baidu.com/srxljl"><font color="#810081">srxljl</font></a><br />
<br />
在网站上文件下载都是直接点击文件联接就行了，这种方法有几个弊端:<br />
1. 有些文件不会下载会直接调用相应的程序打开该文件<br />
2。不能隐藏实际文件地址。<br />
3。不能够从数据库中动态读取文件名进行改名下载</p>
<p>下面是asp.net,c#代码:<br />
string fileName;//文件在数据库中的名称<br />
string dir ;//文件在服务器的物理路径(如c:\aa\ddd\wj0000222.zdo)<br />
long size ;//文件的大小<br />
Response.AddHeader("content-type", "application/x-msdownload;");<br />
Response.AddHeader("Content-Disposition","attachment;filename="+fileName[自己定义的]);<br />
Response.AddHeader("content-length", size.ToString());<br />
Response.WriteFile(dir,0,size);</p>
<p>这种方法可以实现以上的目的，但是当文件名（fileName）为中文时在ie下载端显示的是乱码，有谁知道怎么解决。</p>
<p>我来做个总结吧&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实楼上的方法是可行的，但有局限性&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关键在于UrlEncode这个东东，在下面不同情况下的结果是不一样的&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1。web.config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 里responseEncoding="gb2312"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2。web.config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 里responseEncoding="utf-8"&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用Server.UrlEncode的话必须responseEncoding="utf-8"才会正确&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以不要用Server.UrlEncode，换HttpUtility.UrlEncode&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s=HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes("中文.txt"));&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Response.AppendHeader("Content-Disposition",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "attachment;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename="&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s);<br />
</p>
<p>Response.AddHeader("content-type", "application/x-msdownload;");类型列表</p>
<p>".*"="application/octet-stream"<br />
".001"="application/x-001"<br />
".301"="application/x-301"<br />
".323"="text/h323"<br />
".906"="application/x-906"<br />
".907"="drawing/907"<br />
".a11"="application/x-a11"<br />
".acp"="audio/x-mei-aac"<br />
".ai"="application/postscript"<br />
".aif"="audio/aiff"<br />
".aifc"="audio/aiff"<br />
".aiff"="audio/aiff"<br />
".anv"="application/x-anv"<br />
".asa"="text/asa"<br />
".asf"="video/x-ms-asf"<br />
".asp"="text/asp"<br />
".asx"="video/x-ms-asf"<br />
".au"="audio/basic"<br />
".avi"="video/avi"<br />
".awf"="application/vnd.adobe.workflow"<br />
".biz"="text/xml"<br />
".bmp"="application/x-bmp"<br />
".bot"="application/x-bot"<br />
".c4t"="application/x-c4t"<br />
".c90"="application/x-c90"<br />
".cal"="application/x-cals"<br />
".cat"="application/vnd.ms-pki.seccat"<br />
".cdf"="application/x-netcdf"<br />
".cdr"="application/x-cdr"<br />
".cel"="application/x-cel"<br />
".cer"="application/x-x509-ca-cert"<br />
".cg4"="application/x-g4"<br />
".cgm"="application/x-cgm"<br />
".cit"="application/x-cit"<br />
".class"="java/*"<br />
".cml"="text/xml"<br />
".cmp"="application/x-cmp"<br />
".cmx"="application/x-cmx"<br />
".cot"="application/x-cot"<br />
".crl"="application/pkix-crl"<br />
".crt"="application/x-x509-ca-cert"<br />
".csi"="application/x-csi"<br />
".css"="text/css"<br />
".cut"="application/x-cut"<br />
".dbf"="application/x-dbf"<br />
".dbm"="application/x-dbm"<br />
".dbx"="application/x-dbx"<br />
".dcd"="text/xml"<br />
".dcx"="application/x-dcx"<br />
".der"="application/x-x509-ca-cert"<br />
".dgn"="application/x-dgn"<br />
".dib"="application/x-dib"<br />
".dll"="application/x-msdownload"<br />
".doc"="application/msword"<br />
".dot"="application/msword"<br />
".drw"="application/x-drw"<br />
".dtd"="text/xml"<br />
".dwf"="Model/vnd.dwf"<br />
".dwf"="application/x-dwf"<br />
".dwg"="application/x-dwg"<br />
".dxb"="application/x-dxb"<br />
".dxf"="application/x-dxf"<br />
".edn"="application/vnd.adobe.edn"<br />
".emf"="application/x-emf"<br />
".eml"="message/rfc822"<br />
".ent"="text/xml"<br />
".epi"="application/x-epi"<br />
".eps"="application/x-ps"<br />
".eps"="application/postscript"<br />
".etd"="application/x-ebx"<br />
".exe"="application/x-msdownload"<br />
".fax"="image/fax"<br />
".fdf"="application/vnd.fdf"<br />
".fif"="application/fractals"<br />
".fo"="text/xml"<br />
".frm"="application/x-frm"<br />
".g4"="application/x-g4"<br />
".gbr"="application/x-gbr"<br />
".gcd"="application/x-gcd"<br />
".gif"="image/gif"<br />
".gl2"="application/x-gl2"<br />
".gp4"="application/x-gp4"<br />
".hgl"="application/x-hgl"<br />
".hmr"="application/x-hmr"<br />
".hpg"="application/x-hpgl"<br />
".hpl"="application/x-hpl"<br />
".hqx"="application/mac-binhex40"<br />
".hrf"="application/x-hrf"<br />
".hta"="application/hta"<br />
".htc"="text/x-component"<br />
".htm"="text/html"<br />
".html"="text/html"<br />
".htt"="text/webviewhtml"<br />
".htx"="text/html"<br />
".icb"="application/x-icb"<br />
".ico"="image/x-icon"<br />
".ico"="application/x-ico"<br />
".iff"="application/x-iff"<br />
".ig4"="application/x-g4"<br />
".igs"="application/x-igs"<br />
".iii"="application/x-iphone"<br />
".img"="application/x-img"<br />
".ins"="application/x-internet-signup"<br />
".isp"="application/x-internet-signup"<br />
".IVF"="video/x-ivf"<br />
".java"="java/*"<br />
".jfif"="image/jpeg"<br />
".jpe"="image/jpeg"<br />
".jpe"="application/x-jpe"<br />
".jpeg"="image/jpeg"<br />
".jpg"="image/jpeg"<br />
".jpg"="application/x-jpg"<br />
".js"="application/x-javascript"<br />
".jsp"="text/html"<br />
".la1"="audio/x-liquid-file"<br />
".lar"="application/x-laplayer-reg"<br />
".latex"="application/x-latex"<br />
".lavs"="audio/x-liquid-secure"<br />
".lbm"="application/x-lbm"<br />
".lmsff"="audio/x-la-lms"<br />
".ls"="application/x-javascript"<br />
".ltr"="application/x-ltr"<br />
".m1v"="video/x-mpeg"<br />
".m2v"="video/x-mpeg"<br />
".m3u"="audio/mpegurl"<br />
".m4e"="video/mpeg4"<br />
".mac"="application/x-mac"<br />
".man"="application/x-troff-man"<br />
".math"="text/xml"<br />
".mdb"="application/msaccess"<br />
".mdb"="application/x-mdb"<br />
".mfp"="application/x-shockwave-flash"<br />
".mht"="message/rfc822"<br />
".mhtml"="message/rfc822"<br />
".mi"="application/x-mi"<br />
".mid"="audio/mid"<br />
".midi"="audio/mid"<br />
".mil"="application/x-mil"<br />
".mml"="text/xml"<br />
".mnd"="audio/x-musicnet-download"<br />
".mns"="audio/x-musicnet-stream"<br />
".mocha"="application/x-javascript"<br />
".movie"="video/x-sgi-movie"<br />
".mp1"="audio/mp1"<br />
".mp2"="audio/mp2"<br />
".mp2v"="video/mpeg"<br />
".mp3"="audio/mp3"<br />
".mp4"="video/mpeg4"<br />
".mpa"="video/x-mpg"<br />
".mpd"="application/vnd.ms-project"<br />
".mpe"="video/x-mpeg"<br />
".mpeg"="video/mpg"<br />
".mpg"="video/mpg"<br />
".mpga"="audio/rn-mpeg"<br />
".mpp"="application/vnd.ms-project"<br />
".mps"="video/x-mpeg"<br />
".mpt"="application/vnd.ms-project"<br />
".mpv"="video/mpg"<br />
".mpv2"="video/mpeg"<br />
".mpw"="application/vnd.ms-project"<br />
".mpx"="application/vnd.ms-project"<br />
".mtx"="text/xml"<br />
".mxp"="application/x-mmxp"<br />
".net"="image/pnetvue"<br />
".nrf"="application/x-nrf"<br />
".nws"="message/rfc822"<br />
".odc"="text/x-ms-odc"<br />
".out"="application/x-out"<br />
".p10"="application/pkcs10"<br />
".p12"="application/x-pkcs12"<br />
".p7b"="application/x-pkcs7-certificates"<br />
".p7c"="application/pkcs7-mime"<br />
".p7m"="application/pkcs7-mime"<br />
".p7r"="application/x-pkcs7-certreqresp"<br />
".p7s"="application/pkcs7-signature"<br />
".pc5"="application/x-pc5"<br />
".pci"="application/x-pci"<br />
".pcl"="application/x-pcl"<br />
".pcx"="application/x-pcx"<br />
".pdf"="application/pdf"<br />
".pdf"="application/pdf"<br />
".pdx"="application/vnd.adobe.pdx"<br />
".pfx"="application/x-pkcs12"<br />
".pgl"="application/x-pgl"<br />
".pic"="application/x-pic"<br />
".pko"="application/vnd.ms-pki.pko"<br />
".pl"="application/x-perl"<br />
".plg"="text/html"<br />
".pls"="audio/scpls"<br />
".plt"="application/x-plt"<br />
".png"="image/png"<br />
".png"="application/x-png"<br />
".pot"="application/vnd.ms-powerpoint"<br />
".ppa"="application/vnd.ms-powerpoint"<br />
".ppm"="application/x-ppm"<br />
".pps"="application/vnd.ms-powerpoint"<br />
".ppt"="application/vnd.ms-powerpoint"<br />
".ppt"="application/x-ppt"<br />
".pr"="application/x-pr"<br />
".prf"="application/pics-rules"<br />
".prn"="application/x-prn"<br />
".prt"="application/x-prt"<br />
".ps"="application/x-ps"<br />
".ps"="application/postscript"<br />
".ptn"="application/x-ptn"<br />
".pwz"="application/vnd.ms-powerpoint"<br />
".r3t"="text/vnd.rn-realtext3d"<br />
".ra"="audio/vnd.rn-realaudio"<br />
".ram"="audio/x-pn-realaudio"<br />
".ras"="application/x-ras"<br />
".rat"="application/rat-file"<br />
".rdf"="text/xml"<br />
".rec"="application/vnd.rn-recording"<br />
".red"="application/x-red"<br />
".rgb"="application/x-rgb"<br />
".rjs"="application/vnd.rn-realsystem-rjs"<br />
".rjt"="application/vnd.rn-realsystem-rjt"<br />
".rlc"="application/x-rlc"<br />
".rle"="application/x-rle"<br />
".rm"="application/vnd.rn-realmedia"<br />
".rmf"="application/vnd.adobe.rmf"<br />
".rmi"="audio/mid"<br />
".rmj"="application/vnd.rn-realsystem-rmj"<br />
".rmm"="audio/x-pn-realaudio"<br />
".rmp"="application/vnd.rn-rn_music_package"<br />
".rms"="application/vnd.rn-realmedia-secure"<br />
".rmvb"="application/vnd.rn-realmedia-vbr"<br />
".rmx"="application/vnd.rn-realsystem-rmx"<br />
".rnx"="application/vnd.rn-realplayer"<br />
".rp"="image/vnd.rn-realpix"<br />
".rpm"="audio/x-pn-realaudio-plugin"<br />
".rsml"="application/vnd.rn-rsml"<br />
".rt"="text/vnd.rn-realtext"<br />
".rtf"="application/msword"<br />
".rtf"="application/x-rtf"<br />
".rv"="video/vnd.rn-realvideo"<br />
".sam"="application/x-sam"<br />
".sat"="application/x-sat"<br />
".sdp"="application/sdp"<br />
".sdw"="application/x-sdw"<br />
".sit"="application/x-stuffit"<br />
".slb"="application/x-slb"<br />
".sld"="application/x-sld"<br />
".slk"="drawing/x-slk"<br />
".smi"="application/smil"<br />
".smil"="application/smil"<br />
".smk"="application/x-smk"<br />
".snd"="audio/basic"<br />
".sol"="text/plain"<br />
".sor"="text/plain"<br />
".spc"="application/x-pkcs7-certificates"<br />
".spl"="application/futuresplash"<br />
".spp"="text/xml"<br />
".ssm"="application/streamingmedia"<br />
".sst"="application/vnd.ms-pki.certstore"<br />
".stl"="application/vnd.ms-pki.stl"<br />
".stm"="text/html"<br />
".sty"="application/x-sty"<br />
".svg"="text/xml"<br />
".swf"="application/x-shockwave-flash"<br />
".tdf"="application/x-tdf"<br />
".tg4"="application/x-tg4"<br />
".tga"="application/x-tga"<br />
".tif"="image/tiff"<br />
".tif"="application/x-tif"<br />
".tiff"="image/tiff"<br />
".tld"="text/xml"<br />
".top"="drawing/x-top"<br />
".torrent"="application/x-bittorrent"<br />
".tsd"="text/xml"<br />
".txt"="text/plain"<br />
".uin"="application/x-icq"<br />
".uls"="text/iuls"<br />
".vcf"="text/x-vcard"<br />
".vda"="application/x-vda"<br />
".vdx"="application/vnd.visio"<br />
".vml"="text/xml"<br />
".vpg"="application/x-vpeg005"<br />
".vsd"="application/vnd.visio"<br />
".vsd"="application/x-vsd"<br />
".vss"="application/vnd.visio"<br />
".vst"="application/vnd.visio"<br />
".vst"="application/x-vst"<br />
".vsw"="application/vnd.visio"<br />
".vsx"="application/vnd.visio"<br />
".vtx"="application/vnd.visio"<br />
".vxml"="text/xml"<br />
".wav"="audio/wav"<br />
".wax"="audio/x-ms-wax"<br />
".wb1"="application/x-wb1"<br />
".wb2"="application/x-wb2"<br />
".wb3"="application/x-wb3"<br />
".wbmp"="image/vnd.wap.wbmp"<br />
".wiz"="application/msword"<br />
".wk3"="application/x-wk3"<br />
".wk4"="application/x-wk4"<br />
".wkq"="application/x-wkq"<br />
".wks"="application/x-wks"<br />
".wm"="video/x-ms-wm"<br />
".wma"="audio/x-ms-wma"<br />
".wmd"="application/x-ms-wmd"<br />
".wmf"="application/x-wmf"<br />
".wml"="text/vnd.wap.wml"<br />
".wmv"="video/x-ms-wmv"<br />
".wmx"="video/x-ms-wmx"<br />
".wmz"="application/x-ms-wmz"<br />
".wp6"="application/x-wp6"<br />
".wpd"="application/x-wpd"<br />
".wpg"="application/x-wpg"<br />
".wpl"="application/vnd.ms-wpl"<br />
".wq1"="application/x-wq1"<br />
".wr1"="application/x-wr1"<br />
".wri"="application/x-wri"<br />
".wrk"="application/x-wrk"<br />
".ws"="application/x-ws"<br />
".ws2"="application/x-ws"<br />
".wsc"="text/scriptlet"<br />
".wsdl"="text/xml"<br />
".wvx"="video/x-ms-wvx"<br />
".xdp"="application/vnd.adobe.xdp"<br />
".xdr"="text/xml"<br />
".xfd"="application/vnd.adobe.xfd"<br />
".xfdf"="application/vnd.adobe.xfdf"<br />
".xhtml"="text/html"<br />
".xls"="application/vnd.ms-excel"<br />
".xls"="application/x-xls"<br />
".xlw"="application/x-xlw"<br />
".xml"="text/xml"<br />
".xpl"="audio/scpls"<br />
".xq"="text/xml"<br />
".xql"="text/xml"<br />
".xquery"="text/xml"<br />
".xsd"="text/xml"<br />
".xsl"="text/xml"<br />
".xslt"="text/xml"<br />
".xwd"="application/x-xwd"<br />
".x_b"="application/x-x_b"<br />
".x_t"="application/x-x_t" <br />
</p>
<p>&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1154428.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41958/" target="_blank">[新闻]Intel 收购 Poky Linux ,为 MID 注入新的动力</a>]]></description></item><item><title>SVNCC的使用</title><link>http://www.cnblogs.com/cnherman/articles/1149932.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Sat, 12 Apr 2008 01:49:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1149932.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1149932.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1149932.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1149932.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1149932.html</trackback:ping><description><![CDATA[<p><font face="Verdana">[翻译....]<br />
假如你的开发环境支持SCCI API的源代码控制工具的话,这个插件可以没有问题的的引入你的开发环境.<br />
很多简单的方法可以使这个插件像MS SourceSafe 一样工作在你的IDE里面.<br />
相对最早只能在这个系统使用的SCCI API而言,这个回答是肯定的.<br />
安装前必须:<br />
1,<a href="http://www.pushok.com/soft_download.php?idprogram=3" target="_blank">下载最新版本<br />
</a>2,运行svnproxy.exe,自动安装程序.你不需要设置任何选项,因为它仅仅需要你同意它的使用协议就可以了.</font></p>
<p><font face="Verdana"><br />
完成这些操作之后,这个插件就安装到你的系统里面去了.你只需要查看一下插件是不是已经集成到你的IDE里面去了.<br />
例如<br />
</p>
<ul>[MS VS .NET]
    <li>Run VS .NET environment.
    <li>Check the presence of additional menu item <font class="menupath">File\Source Control</font>. If this menu item is active, the installation has been successful. If you do not see this menu item, then probably your VS .NET edition does not support integration by means of SCCI API. Contact Microsoft to find out how to update your VS .NET edition. </li>
</ul>
<ul>[MS VS]
    <li>Run VS environment.
    <li>Check the presence of additional menu item <font class="menupath">Project\Source Control</font>. If this menu item is active, the installation has been successful. </li>
</ul>
<ul>[MS VB]
    <li>Run VB environment.
    <li>Check the presence of additional menu item <font class="menupath">Tools\Pushok SVN Proxy</font>.
    <li>If the menu item does not appear, do the following:
    <ul>
        <li>Enable Source Control Add-in.<br />
        In Visual Basic, choose <font class="menupath">Add-Ins&gt;Add-In Manager...</font> The Add-In Manager dialog is displayed. Select the add-in and enable it.
        <li>If Source Code Control is not listed:<br />
        Close Visual Basic, edit your vbaddin.ini file (located by default in the Program Files folder), add the following entry under [Add-Ins32]. vbscc=3. Then repeat the previous step. </li>
    </ul>
    </li>
</ul>
<br />
<br />
<br />
太烦了...只翻译比较重要的</font>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1149932.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41957/" target="_blank">[新闻]雅虎将关闭社交网站Mash</a>]]></description></item><item><title>NHibernate 持久化工具概述</title><link>http://www.cnblogs.com/cnherman/articles/1058805.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Wed, 30 Jan 2008 07:19:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1058805.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1058805.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1058805.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1058805.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1058805.html</trackback:ping><description><![CDATA[摘要: 刚刚接触这个NHibernate,于是便在网上搜刮了一番,居然有很多不错的入门教程.贴了~~什么是 NHibernate NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库。Nhibernate 来源于非常优秀的基于Java的Hibernate 关系型持久化工具。NHibernate 从数据库底层来持久化你的.Net 对象到关系型数据库。NHibernate 为你处理这些&nbsp;&nbsp;<a href='http://www.cnblogs.com/cnherman/articles/1058805.html'>阅读全文</a><img src ="http://www.cnblogs.com/cnherman/aggbug/1058805.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41956/" target="_blank">[新闻]中国互联网战争局势图</a>]]></description></item><item><title>C# Dictionary 泛型类 记录</title><link>http://www.cnblogs.com/cnherman/articles/1034861.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Fri, 11 Jan 2008 02:49:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1034861.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1034861.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1034861.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1034861.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1034861.html</trackback:ping><description><![CDATA[<div class="title">泛型的优点（C# 编程指南）<!----></div>
<!--content type: DocStudio. Transform: devdiv2mtps.xslt.-->
<div id="mainSection">
<div id="mainBody">
<p>
<p>在公共语言运行库和 C# 语言的早期版本中，通用化是通过在类型与通用基类型 <a id="ctl00_rs1_mainContentContainer_ctl01" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl01',this);" href="http://msdn2.microsoft.com/zh-cn/library/e5kfa45b(VS.80).aspx">Object</a> 之间进行强制转换来实现的，泛型提供了针对这种限制的解决方案。通过创建泛型类，您可以创建一个在编译时类型安全的集合。</p>
<p>使用非泛型集合类的限制可以通过编写一小段程序来演示，该程序利用 .NET Framework 基类库中的 <a id="ctl00_rs1_mainContentContainer_ctl02" onclick="javascript:Track('ctl00_rs1_mainContentContainer_ctl00|ctl00_rs1_mainContentContainer_ctl02',this);" href="http://msdn2.microsoft.com/zh-cn/library/7x4b0a97(VS.80).aspx">ArrayList</a> 集合类。<strong>ArrayList</strong> 是一个使用起来非常方便的集合类，无需进行修改即可用来存储任何引用或值类型。 </p>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl03_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl03CSharp');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl03CSharp" space="preserve"><span style="color: green">// The .NET Framework 1.1 way to create a list:</span>
System.Collections.ArrayList list1 = <span style="color: blue">new</span> System.Collections.ArrayList();
list1.Add(3);
list1.Add(105);
System.Collections.ArrayList list2 = <span style="color: blue">new</span> System.Collections.ArrayList();
list2.Add(<span style="color: maroon">"It is raining <span style="color: blue">in</span> Redmond."</span>);
list2.Add(<span style="color: maroon">"It is snowing <span style="color: blue">in</span> the mountains."</span>);
</pre>
</div>
<p>但这种方便是需要付出代价的。添加到 <strong>ArrayList</strong> 中的任何引用或值类型都将隐式地向上强制转换为 <strong>Object</strong>。如果项是值类型，则必须在将其添加到列表中时进行装箱操作，在检索时进行取消装箱操作。强制转换以及装箱和取消装箱操作都会降低性能；在必须对大型集合进行循环访问的情况下，装箱和取消装箱的影响非常明显。</p>
<p>另一个限制是缺少编译时类型检查；因为 <strong>ArrayList</strong> 将把所有项都强制转换为 <strong>Object</strong>，所以在编译时无法防止客户端代码执行以下操作：</p>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl04_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl04CSharp');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl04CSharp" space="preserve">System.Collections.ArrayList list = <span style="color: blue">new</span> System.Collections.ArrayList();
<span style="color: green">// Add an integer to the list.</span>
list.Add(3);
<span style="color: green">// Add a string to the list. This will compile, but may cause an error later.</span>
list.Add(<span style="color: maroon">"It is raining <span style="color: blue">in</span> Redmond."</span>);
<span style="color: blue">int</span> t = 0;
<span style="color: green">// This causes an InvalidCastException to be returned.</span>
<span style="color: blue">foreach</span> (<span style="color: blue">int</span> x <span style="color: blue">in</span> list)
{
t += x;
}
</pre>
</div>
<p>尽管将字符串和 <strong>ints</strong> 组合在一个 <strong>ArrayList</strong> 中的做法在创建异类集合时是完全合法的，有时是有意图的，但这种做法更可能产生编程错误，并且直到运行时才能检测到此错误。 </p>
<p>在 C# 语言的 1.0 和 1.1 版本中，只能通过编写自己的特定于类型的集合来避免 .NET Framework 基类库集合类中的通用代码的危险。当然，由于此类不可对多个数据类型重用，因此将丧失通用化的优点，并且您必须对要存储的每个类型重新编写该类。</p>
<p><strong>ArrayList</strong> 和其他相似类真正需要的是：客户端代码基于每个实例指定这些类要使用的具体数据类型的方式。这样将不再需要向上强制转换为 <strong>T:System.Object</strong>，同时，也使得编译器可以进行类型检查。换句话说，<strong>ArrayList</strong> 需要一个 <span class="parameter">type parameter</span>。这正是泛型所能提供的。在 <strong>N:System.Collections.Generic</strong> 命名空间的泛型 <tt>List&lt;T&gt;</tt> 集合中，向该集合添加项的操作类似于以下形式：</p>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl05_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl05CSharp');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl05CSharp" space="preserve"><span style="color: green">// The .NET Framework 2.0 way to create a list</span>
List&lt;<span style="color: blue">int</span>&gt; list1 = <span style="color: blue">new</span> List&lt;<span style="color: blue">int</span>&gt;();
<span style="color: green">// No boxing, no casting:</span>
list1.Add(3);
<span style="color: green">// Compile-time error:</span>
<span style="color: green">// list1.Add(<span style="color: maroon">"It is raining in Redmond."</span>);</span>
</pre>
</div>
<p>对于客户端代码，与 <strong>ArrayList</strong> 相比，使用 <tt>List&lt;T&gt;</tt> 时添加的唯一语法是声明和实例化中的类型参数。虽然这稍微增加了些编码的复杂性，但好处是您可以创建一个比 <strong>ArrayList</strong> 更安全并且速度更快的列表，特别适用于列表项是值类型的情况。</p>
</div>
</div>
<!---->
<div class="title">Dictionary 泛型类<!----></div>
<!--content type: DocStudio. Transform: devdiv2mtps.xslt.-->
<div id="mainSection">
<div id="mainBody">
<p><span style="color: red">注意：此类在 .NET Framework 2.0 版中是新增的。</span>
<p>表示键和值的集合。
<p><strong>命名空间:</strong>System.Collections.Generic<br />
<strong>程序集:</strong>mscorlib（在 mscorlib.dll 中）
<div class="MTPS_CollapsibleRegion" id="ctl00_rs1_mainContentContainer_cpe40509">
<div class="CollapseRegionLink" id="ctl00_rs1_mainContentContainer_cpe40509_h"><img id="ctl00_rs1_mainContentContainer_cpe40509_i" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; vertical-align: middle; border-right-width: 0px" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif" />&nbsp;语法 </div>
<div class="MTPS_CollapsibleSection" id="ctl00_rs1_mainContentContainer_cpe40509_c" style="overflow: visible; width: auto; height: auto">
<div class="MTPS_CollapsibleSection" id="" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none"><a name="syntaxToggle"></a>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl10_VisualBasicDeclaration">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Visual Basic（声明）</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl10VisualBasicDeclaration" space="preserve">&lt;SerializableAttribute&gt; _
&lt;ComVisibleAttribute(<span style="color: blue">False</span>)&gt; _
<span style="color: blue">Public</span> <span style="color: blue">Class</span> Dictionary(<span style="color: blue">Of</span> TKey, TValue)
<span style="color: blue">Implements</span> IDictionary(<span style="color: blue">Of</span> TKey, TValue), ICollection(<span style="color: blue">Of</span> KeyValuePair(<span style="color: blue">Of</span> TKey, TValue)), _
IEnumerable(<span style="color: blue">Of</span> KeyValuePair(<span style="color: blue">Of</span> TKey, TValue)), IDictionary, ICollection, _
IEnumerable, ISerializable, IDeserializationCallback
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl11_VisualBasicUsage">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Visual Basic（用法）</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl11VisualBasicUsage" space="preserve"><span style="color: blue">Dim</span> instance <span style="color: blue">As</span> Dictionary(<span style="color: blue">Of</span> TKey, TValue)
</pre>
</div>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl12_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl12CSharp" space="preserve">[SerializableAttribute]
[ComVisibleAttribute(<span style="color: blue">false</span>)]
<span style="color: blue">public</span> <span style="color: blue">class</span> Dictionary&lt;TKey,TValue&gt; : IDictionary&lt;TKey,TValue&gt;, ICollection&lt;KeyValuePair&lt;TKey,TValue&gt;&gt;,
IEnumerable&lt;KeyValuePair&lt;TKey,TValue&gt;&gt;, IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl13_ManagedCPlusPlus">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl13ManagedCPlusPlus" space="preserve">[SerializableAttribute]
[ComVisibleAttribute(<span style="color: blue">false</span>)]
generic&lt;typename TKey, typename TValue&gt;
<span style="color: blue">public</span> ref <span style="color: blue">class</span> Dictionary : IDictionary&lt;TKey, TValue&gt;, ICollection&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;,
IEnumerable&lt;KeyValuePair&lt;TKey, TValue&gt;&gt;, IDictionary, ICollection, IEnumerable,
ISerializable, IDeserializationCallback
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl14_JSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">J#</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl14JSharp" space="preserve">J# 支持使用泛型类型和方法，但不支持进行新的声明。
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl15_JScript">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">JScript</div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl15JScript" space="preserve">JScript 支持泛型类型和方法。
</pre>
</div>
<p>
<h4 class="subHeading">类型参数</h4>
<dl paramname="">
<dt><span class="parameter"><!----></span>
<dd><span class="parameter">TKey</span>
<p>字典中的键的类型。</p>
</dd></dl>
<dl paramname="">
<dt><span class="parameter"><!----></span>
<dd><span class="parameter">TValue</span>
<p>字典中的值的类型。</p>
</dd></dl></div>
</div>
</div>
<div class="MTPS_CollapsibleRegion" id="ctl00_rs1_mainContentContainer_cpe40510">
<div class="CollapseRegionLink" id="ctl00_rs1_mainContentContainer_cpe40510_h"><img id="ctl00_rs1_mainContentContainer_cpe40510_i" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; vertical-align: middle; border-right-width: 0px" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif" />&nbsp;备注 </div>
<div class="MTPS_CollapsibleSection" id="ctl00_rs1_mainContentContainer_cpe40510_c" style="overflow: visible; width: auto; height: auto">
<div class="MTPS_CollapsibleSection" id="" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none"><a name="remarksToggle"></a>
<p><strong>Dictionary</strong> 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的，接近于 O(1)，这是因为 <strong>Dictionary</strong> 类是作为一个哈希表来实现的。</p>
<div class="alert">
<table width="100%">
    <tbody>
        <tr>
            <th align="left"><img class="note" alt="Note" src="http://msdn2.microsoft.com/zh-cn/library/xfhwa508.note(zh-cn,VS.80).gif" />注意</th>
        </tr>
        <tr>
            <td>
            <p>检索速度取决于为 <span class="parameter">TKey</span> 指定的类型的哈希算法的质量。 </p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>只要对象用作 <strong>Dictionary</strong> 中的键，它就不能以任何影响其哈希值的方式更改。使用字典的相等比较器比较时，<strong>Dictionary</strong> 中的任何键都必须是唯一的。键不能为 空引用（在 Visual Basic 中为 Nothing），但是如果值类型 <span class="parameter">TValue</span> 为引用类型，该值则可以为空。</p>
<p><strong>Dictionary</strong> 需要一个相等实现来确定键是否相等。可以使用一个接受 <span class="parameter">comparer</span> 参数的构造函数来指定 <a id="ctl00_rs1_mainContentContainer_ctl27" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40510_c|ctl00_rs1_mainContentContainer_ctl27',this);" href="http://msdn2.microsoft.com/zh-cn/library/ms132151(VS.80).aspx">IEqualityComparer</a> 泛型接口的实现；如果不指定实现，则使用默认的泛型相等比较器 <a id="ctl00_rs1_mainContentContainer_ctl28" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40510_c|ctl00_rs1_mainContentContainer_ctl28',this);" href="http://msdn2.microsoft.com/zh-cn/library/ms224763(VS.80).aspx">EqualityComparer.Default</a>。如果类型 <span class="parameter">TKey</span> 实现 <a id="ctl00_rs1_mainContentContainer_ctl29" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40510_c|ctl00_rs1_mainContentContainer_ctl29',this);" href="http://msdn2.microsoft.com/zh-cn/library/ms131187(VS.80).aspx">System.IEquatable</a> 泛型接口，则默认相等比较器会使用该实现。</p>
<div class="alert">
<table width="100%">
    <tbody>
        <tr>
            <th align="left"><img class="note" alt="Note" src="http://msdn2.microsoft.com/zh-cn/library/xfhwa508.note(zh-cn,VS.80).gif" />注意</th>
        </tr>
        <tr>
            <td>
            <p>例如，您可以使用 <a id="ctl00_rs1_mainContentContainer_ctl30" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40510_c|ctl00_rs1_mainContentContainer_ctl30',this);" href="http://msdn2.microsoft.com/zh-cn/library/5hc8kytd(VS.80).aspx">StringComparer</a> 类提供的不区分大小写的字符串比较器来创建带不区分大小写的字符串键的字典。</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p><strong>Dictionary</strong> 的容量是 <strong>Dictionary</strong> 可以包含的元素数。在此实现中，<strong>Dictionary</strong> 的默认初始容量为 3；但该默认值可能在 .NET Framework 的未来版本中更改。当向 <strong>Dictionary</strong> 中添加元素时，将通过重新分配内部数组来根据需要自动增大容量。</p>
<p>对于枚举而言，字典中的每一项都被视为一个表示值及其键的 <a id="ctl00_rs1_mainContentContainer_ctl31" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40510_c|ctl00_rs1_mainContentContainer_ctl31',this);" href="http://msdn2.microsoft.com/zh-cn/library/5tbh8a42(VS.80).aspx">KeyValuePair</a> 结构进行处理。项返回的顺序未定义。</p>
<p>C# 语言的 <strong>foreach</strong> 语句（在 C++ 中为 <strong>for each</strong>，在 Visual Basic 中为 <strong>For Each</strong>）需要集合中每个元素的类型。由于 <strong>Dictionary</strong> 是键和值的集合，因此元素类型并非键类型或值类型。相反，元素类型是键类型和值类型的 <strong>KeyValuePair</strong>。例如：</p>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl32_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl32CSharp');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl32CSharp" space="preserve"><span style="color: blue">foreach</span> (KeyValuePair&lt;<span style="color: blue">int</span>, <span style="color: blue">string</span>&gt; kvp <span style="color: blue">in</span> myDictionary) {...}
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl33_ManagedCPlusPlus">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C++</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl33ManagedCPlusPlus');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl33ManagedCPlusPlus" space="preserve"><span style="color: blue">for</span> each (KeyValuePair&lt;<span style="color: blue">int</span>, String^&gt; kvp <span style="color: blue">in</span> myDictionary) {...}
</pre>
</div>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl34_VisualBasic">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Visual Basic</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl34VisualBasic');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl34VisualBasic" space="preserve"><span style="color: blue">For</span> <span style="color: blue">Each</span> kvp <span style="color: blue">As</span> KeyValuePair(<span style="color: blue">Of</span> <span style="color: blue">Integer</span>, <span style="color: blue">String</span>) <span style="color: blue">In</span> myDictionary
...
<span style="color: blue">Next</span> kvp
</pre>
</div>
<p><strong>foreach</strong> 语句是对枚举数的包装，只允许该枚举数读取集合，而不允许写入集合。</p>
</div>
</div>
</div>
<div class="MTPS_CollapsibleRegion" id="ctl00_rs1_mainContentContainer_cpe40511">
<div class="CollapseRegionLink" id="ctl00_rs1_mainContentContainer_cpe40511_h"><img id="ctl00_rs1_mainContentContainer_cpe40511_i" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; vertical-align: middle; border-right-width: 0px" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CollapsibleArea/resources/minus.gif" />&nbsp;示例 </div>
<div class="MTPS_CollapsibleSection" id="ctl00_rs1_mainContentContainer_cpe40511_c" style="overflow: visible; width: auto; height: auto">
<div class="MTPS_CollapsibleSection" id="" style="border-right: medium none; border-top: medium none; border-left: medium none; border-bottom: medium none"><a name="codeExampleToggle"></a>
<p>下面的代码示例创建一个空的带有字符串键的字符串 <strong>Dictionary</strong>，并使用 <a id="ctl00_rs1_mainContentContainer_ctl49" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl49',this);" href="http://msdn2.microsoft.com/zh-cn/library/k7z0zy8k(VS.80).aspx">Add</a> 方法添加一些元素。该示例演示在尝试添加重复的键时 <strong>Add</strong> 方法引发 <a id="ctl00_rs1_mainContentContainer_ctl50" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl50',this);" href="http://msdn2.microsoft.com/zh-cn/library/3w1b3114(VS.80).aspx">ArgumentException</a>。 </p>
<p>该示例使用 <a id="ctl00_rs1_mainContentContainer_ctl51" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl51',this);" href="http://msdn2.microsoft.com/zh-cn/library/9tee9ht2(VS.80).aspx">Item</a> 属性（在 C# 中为 索引器）来检索值，演示当请求的键不存在时将引发 <a id="ctl00_rs1_mainContentContainer_ctl52" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl52',this);" href="http://msdn2.microsoft.com/zh-cn/library/9a35cy81(VS.80).aspx">KeyNotFoundException</a>，并演示与键相关联的值可被替换。 </p>
<p>该示例演示当程序必须经常尝试字典中不存在的键值时，如何使用 <a id="ctl00_rs1_mainContentContainer_ctl53" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl53',this);" href="http://msdn2.microsoft.com/zh-cn/library/zkw5c9ak(VS.80).aspx">TryGetValue</a> 方法作为一种更有效的方法来检索值，它还演示如何使用 <a id="ctl00_rs1_mainContentContainer_ctl54" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl54',this);" href="http://msdn2.microsoft.com/zh-cn/library/kw5aaea4(VS.80).aspx">ContainsKey</a> 方法在调用 <strong>Add</strong> 方法之前测试某个键是否存在。</p>
<p>该示例演示如何枚举字典中的键和值，以及如何分别使用 <a id="ctl00_rs1_mainContentContainer_ctl55" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl55',this);" href="http://msdn2.microsoft.com/zh-cn/library/yt2fy5zk(VS.80).aspx">Keys</a> 属性和 <a id="ctl00_rs1_mainContentContainer_ctl56" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl56',this);" href="http://msdn2.microsoft.com/zh-cn/library/ekcfxy3x(VS.80).aspx">Values</a> 属性来单独枚举键和值。</p>
<p>最后，该示例演示 <a id="ctl00_rs1_mainContentContainer_ctl57" onclick="javascript:Track('ctl00_rs1_mainContentContainer_cpe40511_c|ctl00_rs1_mainContentContainer_ctl57',this);" href="http://msdn2.microsoft.com/zh-cn/library/kabs04ac(VS.80).aspx">Remove</a> 方法。</p>
<div class="codeHide" id="ctl00_rs1_mainContentContainer_ctl58_VisualBasic">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">Visual Basic</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl58VisualBasic');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl58VisualBasic" space="preserve"><span style="color: blue">Imports</span> System
<span style="color: blue">Imports</span> System.Collections.Generic
<span style="color: blue">Public</span> <span style="color: blue">Class</span> Example
<span style="color: blue">Public</span> <span style="color: blue">Shared</span> <span style="color: blue">Sub</span> Main()
<span style="color: green">' Create a new dictionary of strings, with string keys.</span>
<span style="color: green">'</span>
<span style="color: blue">Dim</span> openWith <span style="color: blue">As</span> <span style="color: blue">New</span> Dictionary(<span style="color: blue">Of</span> <span style="color: blue">String</span>, <span style="color: blue">String</span>)
<span style="color: green">' Add some elements to the dictionary. There are no </span>
<span style="color: green">' duplicate keys, but some of the values are duplicates.</span>
openWith.Add(<span style="color: maroon">"txt"</span>, <span style="color: maroon">"notepad.exe"</span>)
openWith.Add(<span style="color: maroon">"bmp"</span>, <span style="color: maroon">"paint.exe"</span>)
openWith.Add(<span style="color: maroon">"dib"</span>, <span style="color: maroon">"paint.exe"</span>)
openWith.Add(<span style="color: maroon">"rtf"</span>, <span style="color: maroon">"wordpad.exe"</span>)
<span style="color: green">' The Add method throws an exception if the new key is </span>
<span style="color: green">' already in the dictionary.</span>
<span style="color: blue">Try</span>
openWith.Add(<span style="color: maroon">"txt"</span>, <span style="color: maroon">"winword.exe"</span>)
<span style="color: blue">Catch</span>
Console.WriteLine(<span style="color: maroon">"An element with Key = "</span><span style="color: maroon">"txt"</span><span style="color: maroon">" already exists."</span>)
<span style="color: blue">End</span> <span style="color: blue">Try</span>
<span style="color: green">' The Item property is the default property, so you </span>
<span style="color: green">' can omit its name when accessing elements. </span>
Console.WriteLine(<span style="color: maroon">"For key = "</span><span style="color: maroon">"rtf"</span><span style="color: maroon">", value = {0}."</span>, _
openWith(<span style="color: maroon">"rtf"</span>))
<span style="color: green">' The default Item property can be used to change the value</span>
<span style="color: green">' associated with a key.</span>
openWith(<span style="color: maroon">"rtf"</span>) = <span style="color: maroon">"winword.exe"</span>
Console.WriteLine(<span style="color: maroon">"For key = "</span><span style="color: maroon">"rtf"</span><span style="color: maroon">", value = {0}."</span>, _
openWith(<span style="color: maroon">"rtf"</span>))
<span style="color: green">' If a key does not exist, setting the default Item property</span>
<span style="color: green">' for that key adds a new key/value pair.</span>
openWith(<span style="color: maroon">"doc"</span>) = <span style="color: maroon">"winword.exe"</span>
<span style="color: green">' The default Item property throws an exception if the requested</span>
<span style="color: green">' key is not in the dictionary.</span>
<span style="color: blue">Try</span>
Console.WriteLine(<span style="color: maroon">"For key = "</span><span style="color: maroon">"tif"</span><span style="color: maroon">", value = {0}."</span>, _
openWith(<span style="color: maroon">"tif"</span>))
<span style="color: blue">Catch</span>
Console.WriteLine(<span style="color: maroon">"Key = "</span><span style="color: maroon">"tif"</span><span style="color: maroon">" is not found."</span>)
<span style="color: blue">End</span> <span style="color: blue">Try</span>
<span style="color: green">' When a program often has to try keys that turn out not to</span>
<span style="color: green">' be in the dictionary, TryGetValue can be a more efficient </span>
<span style="color: green">' way to retrieve values.</span>
<span style="color: blue">Dim</span> value <span style="color: blue">As</span> <span style="color: blue">String</span> = <span style="color: maroon">""</span>
<span style="color: blue">If</span> openWith.TryGetValue(<span style="color: maroon">"tif"</span>, value) <span style="color: blue">Then</span>
Console.WriteLine(<span style="color: maroon">"For key = "</span><span style="color: maroon">"tif"</span><span style="color: maroon">", value = {0}."</span>, value)
<span style="color: blue">Else</span>
Console.WriteLine(<span style="color: maroon">"Key = "</span><span style="color: maroon">"tif"</span><span style="color: maroon">" is not found."</span>)
<span style="color: blue">End</span> <span style="color: blue">If</span>
<span style="color: green">' ContainsKey can be used to test keys before inserting </span>
<span style="color: green">' them.</span>
<span style="color: blue">If</span> <span style="color: blue">Not</span> openWith.ContainsKey(<span style="color: maroon">"ht"</span>) <span style="color: blue">Then</span>
openWith.Add(<span style="color: maroon">"ht"</span>, <span style="color: maroon">"hypertrm.exe"</span>)
Console.WriteLine(<span style="color: maroon">"Value added for key = "</span><span style="color: maroon">"ht"</span><span style="color: maroon">": {0}"</span>, _
openWith(<span style="color: maroon">"ht"</span>))
<span style="color: blue">End</span> <span style="color: blue">If</span>
<span style="color: green">' When you use foreach to enumerate dictionary elements,</span>
<span style="color: green">' the elements are retrieved as KeyValuePair objects.</span>
Console.WriteLine()
<span style="color: blue">For</span> <span style="color: blue">Each</span> kvp <span style="color: blue">As</span> KeyValuePair(<span style="color: blue">Of</span> <span style="color: blue">String</span>, <span style="color: blue">String</span>) <span style="color: blue">In</span> openWith
Console.WriteLine(<span style="color: maroon">"Key = {0}, Value = {1}"</span>, _
kvp.Key, kvp.Value)
<span style="color: blue">Next</span> kvp
<span style="color: green">' To get the values alone, use the Values property.</span>
<span style="color: blue">Dim</span> valueColl <span style="color: blue">As</span> _
Dictionary(<span style="color: blue">Of</span> <span style="color: blue">String</span>, <span style="color: blue">String</span>).ValueCollection = _
openWith.Values
<span style="color: green">' The elements of the ValueCollection are strongly typed</span>
<span style="color: green">' with the type that was specified for dictionary values.</span>
Console.WriteLine()
<span style="color: blue">For</span> <span style="color: blue">Each</span> s <span style="color: blue">As</span> <span style="color: blue">String</span> <span style="color: blue">In</span>  valueColl
Console.WriteLine(<span style="color: maroon">"Value = {0}"</span>, s)
<span style="color: blue">Next</span> s
<span style="color: green">' To get the keys alone, use the Keys property.</span>
<span style="color: blue">Dim</span> keyColl <span style="color: blue">As</span> _
Dictionary(<span style="color: blue">Of</span> <span style="color: blue">String</span>, <span style="color: blue">String</span>).KeyCollection = _
openWith.Keys
<span style="color: green">' The elements of the KeyCollection are strongly typed</span>
<span style="color: green">' with the type that was specified for dictionary keys.</span>
Console.WriteLine()
<span style="color: blue">For</span> <span style="color: blue">Each</span> s <span style="color: blue">As</span> <span style="color: blue">String</span> <span style="color: blue">In</span>  keyColl
Console.WriteLine(<span style="color: maroon">"Key = {0}"</span>, s)
<span style="color: blue">Next</span> s
<span style="color: green">' Use the Remove method to remove a key/value pair.</span>
Console.WriteLine(vbLf + <span style="color: maroon">"Remove("</span><span style="color: maroon">"doc"</span><span style="color: maroon">")"</span>)
openWith.Remove(<span style="color: maroon">"doc"</span>)
<span style="color: blue">If</span> <span style="color: blue">Not</span> openWith.ContainsKey(<span style="color: maroon">"doc"</span>) <span style="color: blue">Then</span>
Console.WriteLine(<span style="color: maroon">"Key "</span><span style="color: maroon">"doc"</span><span style="color: maroon">" is not found."</span>)
<span style="color: blue">End</span> <span style="color: blue">If</span>
<span style="color: blue">End</span> <span style="color: blue">Sub</span>
<span style="color: blue">End</span> <span style="color: blue">Class</span>
<span style="color: green">' This code example produces the following output:</span>
<span style="color: green">'</span>
<span style="color: green">'An element with Key = "txt" already exists.</span>
<span style="color: green">'For key = "rtf", value = wordpad.exe.</span>
<span style="color: green">'For key = "rtf", value = winword.exe.</span>
<span style="color: green">'Key = "tif" is not found.</span>
<span style="color: green">'Key = "tif" is not found.</span>
<span style="color: green">'Value added for key = "ht": hypertrm.exe</span>
<span style="color: green">'</span>
<span style="color: green">'Key = txt, Value = notepad.exe</span>
<span style="color: green">'Key = bmp, Value = paint.exe</span>
<span style="color: green">'Key = dib, Value = paint.exe</span>
<span style="color: green">'Key = rtf, Value = winword.exe</span>
<span style="color: green">'Key = doc, Value = winword.exe</span>
<span style="color: green">'Key = ht, Value = hypertrm.exe</span>
<span style="color: green">'</span>
<span style="color: green">'Value = notepad.exe</span>
<span style="color: green">'Value = paint.exe</span>
<span style="color: green">'Value = paint.exe</span>
<span style="color: green">'Value = winword.exe</span>
<span style="color: green">'Value = winword.exe</span>
<span style="color: green">'Value = hypertrm.exe</span>
<span style="color: green">'</span>
<span style="color: green">'Key = txt</span>
<span style="color: green">'Key = bmp</span>
<span style="color: green">'Key = dib</span>
<span style="color: green">'Key = rtf</span>
<span style="color: green">'Key = doc</span>
<span style="color: green">'Key = ht</span>
<span style="color: green">'</span>
<span style="color: green">'Remove("doc")</span>
<span style="color: green">'Key "doc" is not found.</span>
<span style="color: green">' </span>
</pre>
</div>
<div class="code" id="ctl00_rs1_mainContentContainer_ctl59_CSharp">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage">C#</div>
<div class="CopyCodeButton"><a class="copyCode" href="javascript:CopyCode('ctl00_rs1_mainContentContainer_ctl59CSharp');"><img height="9" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CodeSnippet/resources/copy_off.gif" align="center" border="0" /> 复制代码</a></div>
</div>
<pre class="code" id="ctl00_rs1_mainContentContainer_ctl59CSharp" space="preserve"><span style="color: blue">using</span> System;
<span style="color: blue">using</span> System.Collections.Generic;
<span style="color: blue">public</span> <span style="color: blue">class</span> Example
{
<span style="color: blue">public</span> <span style="color: blue">static</span> <span style="color: blue">void</span> Main()
{
<span style="color: green">// Create a new dictionary of strings, with string keys.</span>
<span style="color: green">//</span>
Dictionary&lt;<span style="color: blue">string</span>, <span style="color: blue">string</span>&gt; openWith =
<span style="color: blue">new</span> Dictionary&lt;<span style="color: blue">string</span>, <span style="color: blue">string</span>&gt;();
<span style="color: green">// Add some elements to the dictionary. There are no </span>
<span style="color: green">// duplicate keys, but some of the values are duplicates.</span>
openWith.Add(<span style="color: maroon">"txt"</span>, <span style="color: maroon">"notepad.exe"</span>);
openWith.Add(<span style="color: maroon">"bmp"</span>, <span style="color: maroon">"paint.exe"</span>);
openWith.Add(<span style="color: maroon">"dib"</span>, <span style="color: maroon">"paint.exe"</span>);
openWith.Add(<span style="color: maroon">"rtf"</span>, <span style="color: maroon">"wordpad.exe"</span>);
<span style="color: green">// The Add method throws an exception if the new key is </span>
<span style="color: green">// already in the dictionary.</span>
<span style="color: blue">try</span>
{
openWith.Add(<span style="color: maroon">"txt"</span>, <span style="color: maroon">"winword.exe"</span>);
}
<span style="color: blue">catch</span> (ArgumentException)
{
Console.WriteLine(<span style="color: maroon">"An element with Key = \"</span>txt\<span style="color: maroon">" already exists."</span>);
}
<span style="color: green">// The Item property is another name for the indexer, so you </span>
<span style="color: green">// can omit its name when accessing elements. </span>
Console.WriteLine(<span style="color: maroon">"For key = \"</span>rtf\<span style="color: maroon">", value = {0}."</span>,
openWith[<span style="color: maroon">"rtf"</span>]);
<span style="color: green">// The indexer can be used to change the value associated</span>
<span style="color: green">// with a key.</span>
openWith[<span style="color: maroon">"rtf"</span>] = <span style="color: maroon">"winword.exe"</span>;
Console.WriteLine(<span style="color: maroon">"For key = \"</span>rtf\<span style="color: maroon">", value = {0}."</span>,
openWith[<span style="color: maroon">"rtf"</span>]);
<span style="color: green">// If a key does not exist, setting the indexer for that key</span>
<span style="color: green">// adds a new key/value pair.</span>
openWith[<span style="color: maroon">"doc"</span>] = <span style="color: maroon">"winword.exe"</span>;
<span style="color: green">// The indexer throws an exception if the requested key is</span>
<span style="color: green">// not in the dictionary.</span>
<span style="color: blue">try</span>
{
Console.WriteLine(<span style="color: maroon">"For key = \"</span>tif\<span style="color: maroon">", value = {0}."</span>,
openWith[<span style="color: maroon">"tif"</span>]);
}
<span style="color: blue">catch</span> (KeyNotFoundException)
{
Console.WriteLine(<span style="color: maroon">"Key = \"</span>tif\<span style="color: maroon">" is not found."</span>);
}
<span style="color: green">// When a program often has to try keys that turn out not to</span>
<span style="color: green">// be in the dictionary, TryGetValue can be a more efficient </span>
<span style="color: green">// way to retrieve values.</span>
<span style="color: blue">string</span> value = <span style="color: maroon">""</span>;
<span style="color: blue">if</span> (openWith.TryGetValue(<span style="color: maroon">"tif"</span>, out value))
{
Console.WriteLine(<span style="color: maroon">"For key = \"</span>tif\<span style="color: maroon">", value = {0}."</span>, value);
}
<span style="color: blue">else</span>
{
Console.WriteLine(<span style="color: maroon">"Key = \"</span>tif\<span style="color: maroon">" is not found."</span>);
}
<span style="color: green">// ContainsKey can be used to test keys before inserting </span>
<span style="color: green">// them.</span>
<span style="color: blue">if</span> (!openWith.ContainsKey(<span style="color: maroon">"ht"</span>))
{
openWith.Add(<span style="color: maroon">"ht"</span>, <span style="color: maroon">"hypertrm.exe"</span>);
Console.WriteLine(<span style="color: maroon">"Value added <span style="color: blue">for</span> key = \"</span>ht\<span style="color: maroon">": {0}"</span>,
openWith[<span style="color: maroon">"ht"</span>]);
}
<span style="color: green">// When you use foreach to enumerate dictionary elements,</span>
<span style="color: green">// the elements are retrieved as KeyValuePair objects.</span>
Console.WriteLine();
<span style="color: blue">foreach</span>( KeyValuePair&lt;<span style="color: blue">string</span>, <span style="color: blue">string</span>&gt; kvp <span style="color: blue">in</span> openWith )
{
Console.WriteLine(<span style="color: maroon">"Key = {0}, Value = {1}"</span>,
kvp.Key, kvp.Value);
}
<span style="color: green">// To get the values alone, use the Values property.</span>
Dictionary&lt;<span style="color: blue">string</span>, <span style="color: blue">string</span>&gt;.ValueCollection valueColl =
openWith.Values;
<span style="color: green">// The elements of the ValueCollection are strongly typed</span>
<span style="color: green">// with the type that was specified for dictionary values.</span>
Console.WriteLine();
<span style="color: blue">foreach</span>( <span style="color: blue">string</span> s <span style="color: blue">in</span> valueColl )
{
Console.WriteLine(<span style="color: maroon">"Value = {0}"</span>, s);
}
<span style="color: green">// To get the keys alone, use the Keys property.</span>
Dictionary&lt;<span style="color: blue">string</span>, <span style="color: blue">string</span>&gt;.KeyCollection keyColl =
openWith.Keys;
<span style="color: green">// The elements of the KeyCollection are strongly typed</span>
<span style="color: green">// with the type that was specified for dictionary keys.</span>
Console.WriteLine();
<span style="color: blue">foreach</span>( <span style="color: blue">string</span> s <span style="color: blue">in</span> keyColl )
{
Console.WriteLine(<span style="color: maroon">"Key = {0}"</span>, s);
}
<span style="color: green">// Use the Remove method to remove a key/value pair.</span>
Console.WriteLine(<span style="color: maroon">"\nRemove(\"</span>doc\<span style="color: maroon">")"</span>);
openWith.Remove(<span style="color: maroon">"doc"</span>);
<span style="color: blue">if</span> (!openWith.ContainsKey(<span style="color: maroon">"doc"</span>))
{
Console.WriteLine(<span style="color: maroon">"Key \"</span>doc\<span style="color: maroon">" is not found."</span>);
}
}
}
/* This code example produces the following output:
An element with Key = <span style="color: maroon">"txt"</span> already exists.
For key = <span style="color: maroon">"rtf"</span>, value = wordpad.exe.
For key = <span style="color: maroon">"rtf"</span>, value = winword.exe.
Key = <span style="color: maroon">"tif"</span> is not found.
Key = <span style="color: maroon">"tif"</span> is not found.
Value added <span style="color: blue">for</span> key = <span style="color: maroon">"ht"</span>: hypertrm.exe
Key = txt, Value = notepad.exe
Key = bmp, Value = paint.exe
Key = dib, Value = paint.exe
Key = rtf, Value = winword.exe
Key = doc, Value = winword.exe
Key = ht, Value = hypertrm.exe
Value = notepad.exe
Value = paint.exe
Value = paint.exe
Value = winword.exe
Value = winword.exe
Value = hypertrm.exe
Key = txt
Key = bmp
Key = dib
Key = rtf
Key = doc
Key = ht
Remove(<span style="color: maroon">"doc"</span>)
Key <span style="color: maroon">"doc"</span> is not found.
*/
</pre>
</div>
</div>
</div>
</div>
<div class="MTPS_CollapsibleRegion" id="ctl00_rs1_mainContentContainer_cpe40512">
<div class="CollapseRegionLink" id="ctl00_rs1_mainContentContainer_cpe40512_h"><img id="ctl00_rs1_mainContentContainer_cpe40512_i" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; vertical-align: middle; border-right-width: 0px" alt="" src="http://msdn2.microsoft.com/Platform/Controls/CollapsibleArea/resources/plus.gif" />&nbsp;继承层次结构<br />
<br />
<font face="Courier New">http://msdn2.microsoft.com/zh-cn/library/xfhwa508(VS.80).aspx</font></div>
</div>
</div>
</div>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1034861.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41955/" target="_blank">[新闻]开源多点触摸技术试运行</a>]]></description></item><item><title>一个Drag效果.</title><link>http://www.cnblogs.com/cnherman/articles/1033734.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Thu, 10 Jan 2008 07:25:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1033734.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1033734.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1033734.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1033734.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1033734.html</trackback:ping><description><![CDATA[<div class="cnt">
<p>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;DRAG the DIV&lt;/title&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />
&lt;style&gt;<br />
*{font-size:12px}<br />
.dragTable{<br />
font-size:12px;<br />
border-top:1px solid #3366cc;<br />
margin-bottom: 10px;<br />
width:100%;<br />
background-color:#FFFFFF;<br />
}<br />
td{vertical-align:top;}<br />
.dragTR{<br />
cursor:move;<br />
color:#7787cc;<br />
background-color:#e5eef9;<br />
height:20px;<br />
padding-left:5px;<br />
font-weight:bold;<br />
}<br />
#parentTable{<br />
border-collapse:collapse;<br />
letter-spacing:25px;<br />
}<br />
&lt;/style&gt;<br />
&lt;script defer&gt;<br />
/****JoeLee************E-MAIL:hktx@163.com****QQ:48293707*****11:09 2006-2-9******/<br />
var Drag={dragged:false,<br />
&nbsp;&nbsp; ao:null,<br />
&nbsp;&nbsp; tdiv:null,<br />
dragStart:function(){<br />
Drag.ao=event.srcElement;<br />
if((Drag.ao.tagName=="TD")||(Drag.ao.tagName=="TR")){<br />
&nbsp;&nbsp; Drag.ao=Drag.ao.offsetParent;<br />
&nbsp;&nbsp; Drag.ao.style.zIndex=100;<br />
}else<br />
&nbsp;&nbsp; return;<br />
Drag.dragged=true;<br />
Drag.tdiv=document.createElement("div");<br />
Drag.tdiv.innerHTML=Drag.ao.outerHTML;<br />
Drag.ao.style.border="1px dashed red";<br />
Drag.tdiv.style.display="block";<br />
Drag.tdiv.style.position="absolute";<br />
Drag.tdiv.style.filter="alpha(opacity=70)";<br />
Drag.tdiv.style.cursor="move";<br />
Drag.tdiv.style.border="1px solid #000000";<br />
Drag.tdiv.style.width=Drag.ao.offsetWidth;<br />
Drag.tdiv.style.height=Drag.ao.offsetHeight;<br />
Drag.tdiv.style.top=Drag.getInfo(Drag.ao).top;<br />
Drag.tdiv.style.left=Drag.getInfo(Drag.ao).left;<br />
document.body.appendChild(Drag.tdiv);<br />
Drag.lastX=event.clientX;<br />
Drag.lastY=event.clientY;<br />
Drag.lastLeft=Drag.tdiv.style.left;<br />
Drag.lastTop=Drag.tdiv.style.top;<br />
},</p>
<p>draging:function(){//重要:判断MOUSE的位置<br />
if(!Drag.dragged||Drag.ao==null)return;<br />
var tX=event.clientX;<br />
var tY=event.clientY;<br />
Drag.tdiv.style.left=parseInt(Drag.lastLeft)+tX-Drag.lastX;<br />
Drag.tdiv.style.top=parseInt(Drag.lastTop)+tY-Drag.lastY;<br />
for(var i=0;i&lt;parentTable.cells.length;i++){<br />
&nbsp;&nbsp; var parentCell=Drag.getInfo(parentTable.cells[i]);<br />
&nbsp;&nbsp; if(tX&gt;=parentCell.left&amp;&amp;tX&lt;=parentCell.right&amp;&amp;tY&gt;=parentCell.top&amp;&amp;tY&lt;=parentCell.bottom){<br />
&nbsp;&nbsp;&nbsp; var subTables=parentTable.cells[i].getElementsByTagName("table");<br />
&nbsp;&nbsp;&nbsp; if(subTables.length==0){<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(tX&gt;=parentCell.left&amp;&amp;tX&lt;=parentCell.right&amp;&amp;tY&gt;=parentCell.top&amp;&amp;tY&lt;=parentCell.bottom){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTable.cells[i].appendChild(Drag.ao);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; for(var j=0;j&lt;subTables.length;j++){<br />
&nbsp;&nbsp;&nbsp;&nbsp; var subTable=Drag.getInfo(subTables[j]);<br />
&nbsp;&nbsp;&nbsp;&nbsp; if(tX&gt;=subTable.left&amp;&amp;tX&lt;=subTable.right&amp;&amp;tY&gt;=subTable.top&amp;&amp;tY&lt;=subTable.bottom){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTable.cells[i].insertBefore(Drag.ao,subTables[j]);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parentTable.cells[i].appendChild(Drag.ao);<br />
&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
}<br />
}<br />
,<br />
dragEnd:function(){<br />
if(!Drag.dragged)return;<br />
Drag.dragged=false;<br />
Drag.mm=Drag.repos(150,15);<br />
Drag.ao.style.borderWidth="0px";<br />
Drag.ao.style.borderTop="1px solid #3366cc";<br />
Drag.tdiv.style.borderWidth="0px";<br />
Drag.ao.style.zIndex=1;<br />
},<br />
getInfo:function(o){//取得坐标<br />
var to=new Object();<br />
to.left=to.right=to.top=to.bottom=0;<br />
var twidth=o.offsetWidth;<br />
var theight=o.offsetHeight;<br />
while(o!=document.body){<br />
&nbsp;&nbsp; to.left+=o.offsetLeft;<br />
&nbsp;&nbsp; to.top+=o.offsetTop;<br />
&nbsp;&nbsp; o=o.offsetParent;<br />
}<br />
&nbsp;&nbsp; to.right=to.left+twidth;<br />
&nbsp;&nbsp; to.bottom=to.top+theight;<br />
return to;<br />
},<br />
repos:function(aa,ab){<br />
var f=Drag.tdiv.filters.alpha.opacity;<br />
var tl=parseInt(Drag.getInfo(Drag.tdiv).left);<br />
var tt=parseInt(Drag.getInfo(Drag.tdiv).top);<br />
var kl=(tl-Drag.getInfo(Drag.ao).left)/ab;<br />
var kt=(tt-Drag.getInfo(Drag.ao).top)/ab;<br />
var kf=f/ab;<br />
return setInterval(function(){if(ab&lt;1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clearInterval(Drag.mm);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drag.tdiv.removeNode(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drag.ao=null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ab--;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tl-=kl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tt-=kt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f-=kf;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drag.tdiv.style.left=parseInt(tl)+"px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drag.tdiv.style.top=parseInt(tt)+"px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Drag.tdiv.filters.alpha.opacity=f;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
,aa/ab)<br />
},<br />
inint:function(){//初始化<br />
for(var i=0;i&lt;parentTable.cells.length;i++){<br />
&nbsp;&nbsp; var subTables=parentTable.cells[i].getElementsByTagName("table");<br />
&nbsp;&nbsp; for(var j=0;j&lt;subTables.length;j++){<br />
&nbsp;&nbsp;&nbsp; if(subTables[j].className!="dragTable")break;<br />
&nbsp;&nbsp;&nbsp; subTables[j].rows[0].className="dragTR";<br />
&nbsp;&nbsp;&nbsp; subTables[j].rows[0].attachEvent("onmousedown",Drag.dragStart);<br />
&nbsp;&nbsp; }<br />
}<br />
document.onmousemove=Drag.draging;<br />
document.onmouseup=Drag.dragEnd;<br />
}<br />
//end of Object Drag<br />
}<br />
Drag.inint();</p>
<p>function _show(str){<br />
var w=window.open('','');<br />
var d=w.document;<br />
d.open();<br />
str=str.replace(/=(?!")(.*?)(?!")( |&gt;)/g,"=\"$1\"$2");<br />
str=str.replace(/(&lt;)(.*?)(&gt;)/g,"&lt;span style='color:red;'&gt;&amp;lt;$2&amp;gt;&lt;/span&gt;&lt;br /&gt;");<br />
str=str.replace(/\r/g,"&lt;br /&gt;\n");<br />
d.write(str);<br />
}<br />
&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;table border="0" cellpadding="0" cellspacing="10" width="100%" height=500 id="parentTable"&gt;<br />
&lt;tr &gt;<br />
&lt;td width="25%" valgin="top"&gt;<br />
&nbsp;&nbsp; &lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;b&gt;GMAIL&lt;/b&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;暂时无法显示GMAIL内容&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;&lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;新浪体育&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;解剖威队独门利器FW28 2万转引擎匹配超级变速器颁奖：辛吉斯欣喜能以冠军起步&lt;br/&gt; 印度搭档创下纪录法新社前瞻冬奥短道速滑：中韩唱主角 美加施冷箭&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;<br />
&nbsp;&nbsp; &lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;焦点&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;京广线中断4小时20临客返汉晚点 中国新闻网-湖北分社 - 所有 235 相关报道 &amp;raquo;哈马斯已有总理人选 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解放日报报业集团 - 所有 489 相关报道 &amp;raquo;陈水扁是两岸关系麻烦制造者 武汉晨报 - 所有 179 相关报道 &amp;raquo;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;td width="25%"&gt;<br />
&nbsp;&nbsp; &lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;中关村在线&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;新年行情速递 双敏板卡低价推荐 终于等到了，映泰6600GT一降降一百 罗技G15游戏键盘热力促销，代购价仅529元 &lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;&lt;/td&gt;<br />
&lt;td width="25%"&gt;<br />
&nbsp;&nbsp; &lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;网易商业&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;上海GDP增幅去年出现回落应对反倾销 中国鞋企联手对抗欧盟尹家绪操盘南方汽车 长安谋求曲线整体境外上市&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;&nbsp;&nbsp; &lt;table border=0 class="dragTable" cellspacing="0"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;黑可天下&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;上海GDP增幅去年出现回落应对反倾销 中国鞋企联手对抗欧盟尹家绪操盘南方汽车 长安谋求曲线整体境外上市&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp; &lt;/table&gt;<br />
&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/table&gt;<br />
&lt;input type="button" value="SHOW" onClick="_show(document.documentElement.innerHTML)" /&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
</div>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1033734.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41954/" target="_blank">[新闻]国内软件外包高管集聚大连 探讨竞争与应对策略</a>]]></description></item><item><title>C#泛型</title><link>http://www.cnblogs.com/cnherman/articles/1033315.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Thu, 10 Jan 2008 03:46:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1033315.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1033315.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1033315.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1033315.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1033315.html</trackback:ping><description><![CDATA[<div class="postTitle">C#泛型 </div>
<p><strong><span style="color: #0065e8">C#泛型类与结构</span><br />
</strong>C#除可单独声明泛型类型（包括类与结构）外，也可在基类中包含泛型类型的声明。但基类如果是泛型类，它的类型参数要么已实例化，要么来源于子类（同样是泛型类型）声明的类型参数。<br />
class C&lt;U, V&gt; {} <span style="color: #3c8a4f">//合法<br />
</span>class D: C&lt;string,int&gt;{} <span style="color: #3c8a4f">//合法</span><br />
class E&lt;U, V&gt;: C&lt;U, V&gt; {} <span style="color: #3c8a4f">//合法<br />
</span>class F&lt;U, V&gt;: C&lt;string, int&gt; {} <span style="color: #3c8a4f">//合法<br />
</span>class G : C&lt;U, V&gt; { } <span style="color: #ff0000">//非法<br />
</span><br />
<span style="color: #0065e8"><strong>泛型类型的成员</strong><br />
</span>class C&lt;V&gt;{<br />
public V f1; //声明字段<br />
public D&lt;V&gt; f2; //作为其他泛型类型的参数<br />
public C(V x) {<br />
this.f1 = x;<br />
}<br />
}<br />
泛型类型的成员可以使用泛型类型声明中的类型参数。但类型参数如果没有任何约束，则只能在该类型上使用从System.Object继承的公有成员。<br />
<br />
<strong style="color: #0065e8">泛型接口</strong><br />
interface IList&lt;T&gt; {<br />
T[] GetElements();<br />
}<br />
interface IDictionary&lt;K,V&gt; {<br />
void Add(K key, V value);<br />
}<br />
// 泛型接口的类型参数要么已实例化，<br />
// 要么来源于实现类声明的类型参数<br />
class List&lt;T&gt; : IList&lt;T&gt;, IDictionary&lt;int, T&gt; {<br />
public T[] GetElements() { return null; }<br />
public void Add(int index, T value) { }<br />
}<br />
<strong style="color: #0065e8">泛型委托</strong><br />
delegate bool Predicate&lt;T&gt;(T value);<br />
class X {<br />
static bool F(int i) {...}<br />
static bool G(string s) {...}<br />
static void Main() {<br />
Predicate&lt;string&gt; p2 = G;<br />
Predicate&lt;int&gt; p1 = new Predicate&lt;int&gt;(F);<br />
}<br />
}<br />
泛型委托支持在委托返回值和参数上应用参数类型，这些参数类型同样可以附带合法的约束。<br />
<strong style="color: #0065e8">泛型方法简介<br />
</strong>&#8226; C#泛型机制只支持&#8220;在方法声明上包含类型参数&#8221;——即泛型方法<br />
&#8226; C#泛型机制不支持在除方法外的其他成员（包括属性、事件、索引器、构造器、析构器）的声明上包含类&nbsp;&nbsp;&nbsp; 型参数，但这些成员本身可以包含在泛型类型中，并使用泛型类型的类型参数<br />
&#8226; 泛型方法既可以包含在泛型类型中，也可以包含在非泛型类型中<br />
泛型方法的声明与调用<br />
<span style="color: #3c8a4f">//不是泛型类,是一个具体的类，这个类不需要泛型类型的实例化<br />
</span>public class Finder {<br />
<span style="color: #3c8a4f">// 但是是一个泛型方法,请看泛型方法的声明，参数要求泛型化<br />
</span>public static int Find&lt;T&gt; ( T[] items, T item) {<br />
for(int i=0;i&lt;items.Length;i++){<br />
if (items[i].Equals(item)) { return i; }<br />
}<br />
return -1;<br />
}<br />
}<br />
<span style="color: #3c8a4f">// 泛型方法的调用&lt;int&gt;不是放到Finder后面，而是放在Find后面。</span><br />
int i=Finder.Find&lt;int&gt; ( new int[]{1,3,4,5,6,8,9}, 6);<br />
<br />
<strong style="color: #3366ff">泛型方法的重载</strong><br />
class MyClass {<br />
void F1&lt;T&gt;(T[] a, int i); <span style="color: #57a46a">// 不可以构成重载方法<br />
</span>void F1&lt;U&gt;(U[] a, int i);<br />
void F2&lt;T&gt;(int x); <span style="color: #57a46a">//可以构成重载方法<br />
</span>void F2(int x);<br />
<span style="color: #57a46a">//两句申明一样，where字句,T继承A，泛型参数必需要继承A</span><br />
<u><span style="background-color: #ff6884">void F3&lt;T&gt;(T t) where T : A</span>;</u> <span style="color: #57a46a">//不可以构成重载方法<br />
</span>void F3&lt;T&gt;(T t) where T : B;<br />
}<br />
<strong><span style="color: #3366ff">泛型方法的重写</span><br />
</strong>abstract class Base<br />
{<br />
public abstract T F&lt;T,U&gt;(T t, U u) where U: T;<br />
public abstract T G&lt;T&gt;(T t) where T: IComparable;<br />
}<br />
class Derived: Base{<br />
<span style="color: #57a46a">//合法的重写，约束被默认继承，只需要写方法的签名</span><br />
public override X F&lt;X,Y&gt;(X x, Y y) { }<br />
<span style="color: #57a46a">//非法的重写，指定任何约束都是多余的<br />
//重写的时候，不能写约束，也不添加新的约束，只能继承父类的约束。<br />
</span>public override T G&lt;T&gt;(T t) where T: IComparable {}<br />
}<br />
<strong><span style="color: #3366ff">泛型约束简介</span><br />
</strong>&#8226; C#泛型要求对&#8220;所有泛型类型或泛型方法的类型参数&#8221;的任何假定，都要基于&#8220;显式的约束&#8221;，以维护<br />
C#所要求的类型安全。<br />
&#8226; &#8220;显式约束&#8221;由where子句表达，可以指定&#8220;基类约束&#8221;，&#8220;接口约束&#8221;，&#8220;构造器约束&#8221;&#8220;值类型/引用类型约束&#8221;共四种约束。<br />
&#8226; &#8220;显式约束&#8221;并非必须，如果没有指定&#8220;显式约束&#8221;，泛型类型参数将只能访问System.Object类型中的公有方法。<br />
<strong><span style="color: #3366ff">基类约束</span><br />
</strong>class A { public void F1() {&#8230;} }<br />
class B { public void F2() {&#8230;} }<br />
class C&lt;S,T&gt;<br />
where S: A // S继承自A<br />
where T: B // T继承自B<br />
{<br />
// 可以在类型为S的变量上调用F1，<br />
// 可以在类型为T的变量上调用F2<br />
&#8230;.<br />
}<br />
<strong style="color: #3366ff">接口约束</strong><br />
interface IPrintable { void Print(); }<br />
interface IComparable&lt;T&gt; { int CompareTo(T v);}<br />
interface IKeyProvider&lt;T&gt; { T GetKey(); }<br />
class Dictionary&lt;K,V&gt;<br />
where K: IComparable&lt;K&gt;<br />
where V: IPrintable, IKeyProvider&lt;K&gt;<br />
{<br />
// 可以在类型为K的变量上调用CompareTo，<br />
// 可以在类型为V的变量上调用Print和GetKey<br />
&#8230;.<br />
}<br />
<strong style="color: #3366ff">构造器约束<br />
</strong>class A { public A() { } }<br />
class B { public B(int i) { } }<br />
class C&lt;T&gt;<br />
where T : new()<br />
{<br />
//可以在其中使用T t=new T();<br />
&#8230;.<br />
}<br />
C&lt;A&gt; c=new C&lt;A&gt;(); //可以，A有无参构造器<br />
C&lt;B&gt; c=new C&lt;B&gt;(); //错误，B没有无参构造器<br />
<strong style="color: #3366ff">值类型/引用类型约束<br />
</strong>public struct A { &#8230; }<br />
public class B { &#8230; }<br />
class C&lt;T&gt;<br />
where T : struct<br />
{<br />
// T在这里面是一个值类型<br />
&#8230;<br />
}<br />
C&lt;A&gt; c=new C&lt;A&gt;(); //可以，A是一个值类型<br />
C&lt;B&gt; c=new C&lt;B&gt;(); //错误，B是一个引用类型<br />
<strong style="color: black; background-color: #99ff99">where</strong>用于指定类型约束,这些约束可以作为<strong style="color: black; background-color: #ffff66">泛型</strong>声明中定义的类型参数的变量.如下:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_51_53_Open_Image" onclick="this.style.display='none'; Codehighlighter1_51_53_Open_Text.style.display='none'; Codehighlighter1_51_53_Closed_Image.style.display='inline'; Codehighlighter1_51_53_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_51_53_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_51_53_Closed_Text.style.display='none'; Codehighlighter1_51_53_Open_Image.style.display='inline'; Codehighlighter1_51_53_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyGenericClass</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;T:IComparable&nbsp;</span><span id="Codehighlighter1_51_53_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_51_53_Open_Text"><span style="color: #000000">{&nbsp;}</span></span></div>
<p>&nbsp;<br />
&nbsp;&nbsp;除了接口约束,<strong style="color: black; background-color: #99ff99">where</strong>还可以包括基类约束,以指出某个类型必须将指定的类作为基类(或者就是该类本身),才能用作该<strong style="color: black; background-color: #ffff66">泛型</strong>的类型参数.如下:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyClassy</span><span style="color: #000000">&lt;</span><span style="color: #000000">T,&nbsp;U</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;T&nbsp;:&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;U&nbsp;:&nbsp;</span><span style="color: #0000ff">struct</span><span style="color: #000000"><br />
<img id="Codehighlighter1_62_64_Open_Image" onclick="this.style.display='none'; Codehighlighter1_62_64_Open_Text.style.display='none'; Codehighlighter1_62_64_Closed_Image.style.display='inline'; Codehighlighter1_62_64_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_62_64_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_62_64_Closed_Text.style.display='none'; Codehighlighter1_62_64_Open_Image.style.display='inline'; Codehighlighter1_62_64_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_62_64_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_62_64_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>&nbsp;<br />
&nbsp;&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>还可以包括构造函数约束,可以使用new运算符创建类型参数的实例;但类型参数必须受构造函数约束new()的约束.new()约束可以让编译器知道:提供的任何类型参数都必须具有可访问的无参数构造函数,如下:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;MyGenericClass&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;T:&nbsp;IComparable,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">()<br />
<img id="Codehighlighter1_60_152_Open_Image" onclick="this.style.display='none'; Codehighlighter1_60_152_Open_Text.style.display='none'; Codehighlighter1_60_152_Closed_Image.style.display='inline'; Codehighlighter1_60_152_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_60_152_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_60_152_Closed_Text.style.display='none'; Codehighlighter1_60_152_Open_Image.style.display='inline'; Codehighlighter1_60_152_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_60_152_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_60_152_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;The&nbsp;following&nbsp;line&nbsp;is&nbsp;not&nbsp;possible&nbsp;without&nbsp;new()&nbsp;constraint:</span><span style="color: #008000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;item&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;T();<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;对于多个类型参数,每个类型参数都使用一个<strong style="color: black; background-color: #99ff99">where</strong>,例如:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;Dictionary</span><span style="color: #000000">&lt;</span><span style="color: #000000">TKey,TVal</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;TKey:&nbsp;IComparable,&nbsp;IEnumerable<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;TVal:&nbsp;MyI<br />
<img id="Codehighlighter1_89_143_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_143_Open_Text.style.display='none'; Codehighlighter1_89_143_Closed_Image.style.display='inline'; Codehighlighter1_89_143_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_89_143_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_89_143_Closed_Text.style.display='none'; Codehighlighter1_89_143_Open_Image.style.display='inline'; Codehighlighter1_89_143_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_89_143_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_89_143_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;Add(TKey&nbsp;key,&nbsp;TVal&nbsp;val)<br />
<img id="Codehighlighter1_135_141_Open_Image" onclick="this.style.display='none'; Codehighlighter1_135_141_Open_Text.style.display='none'; Codehighlighter1_135_141_Closed_Image.style.display='inline'; Codehighlighter1_135_141_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_135_141_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_135_141_Closed_Text.style.display='none'; Codehighlighter1_135_141_Open_Image.style.display='inline'; Codehighlighter1_135_141_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_135_141_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_135_141_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;还可以将约束附加到<strong style="color: black; background-color: #ffff66">泛型</strong>方法的类型参数,例如:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_52_54_Open_Image" onclick="this.style.display='none'; Codehighlighter1_52_54_Open_Text.style.display='none'; Codehighlighter1_52_54_Closed_Image.style.display='inline'; Codehighlighter1_52_54_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_52_54_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_52_54_Closed_Text.style.display='none'; Codehighlighter1_52_54_Open_Image.style.display='inline'; Codehighlighter1_52_54_Open_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">bool</span><span style="color: #000000">&nbsp;MyMethod</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">(T&nbsp;t)&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;T&nbsp;:&nbsp;IMyInterface&nbsp;</span><span id="Codehighlighter1_52_54_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.cnblogs.com/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_52_54_Open_Text"><span style="color: #000000">{&nbsp;}</span></span></div>
<p><br />
&nbsp;&nbsp;&nbsp;注意:对于委托和方法两者来说，描述类型参数约束的语法是一样的:<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">delegate</span><span style="color: #000000">&nbsp;T&nbsp;MyDelegate</span><span style="color: #000000">&lt;</span><span style="color: #000000">T</span><span style="color: #000000">&gt;</span><span style="color: #000000">()&nbsp;<strong style="color: black; background-color: #99ff99">where</strong>&nbsp;T&nbsp;:&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">()</span></div>
<p><br />
<strong><span style="color: #3366ff">总结</span></strong><br />
&#8226; C#的泛型能力由CLR在运行时支持，它既不同于C++在编译时所支持的静态模板，也不同于Java在编译器层面使用&#8220;搽拭法&#8221;支持的简单的泛型。<br />
&#8226; C#的泛型支持包括类、结构、接口、委托共四种泛型类型，以及方法成员。<br />
&#8226; C#的泛型采用&#8220;基类, 接口, 构造器, 值类型/引用类型&#8221;的约束方式来实现对类型参数的&#8220;显式约束&#8221;，它不支持C++模板那样的基于签名的隐式约束。<br />
</p>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1033315.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41954/" target="_blank">[新闻]国内软件外包高管集聚大连 探讨竞争与应对策略</a>]]></description></item><item><title>Vs2005 快捷键 [未整理]</title><link>http://www.cnblogs.com/cnherman/articles/1031612.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Wed, 09 Jan 2008 03:47:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/1031612.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1031612.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/1031612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1031612.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1031612.html</trackback:ping><description><![CDATA[<p>快捷键 功能<br />
CTRL + SHIFT + B生成解决方案<br />
CTRL + F7 生成编译<br />
CTRL + O 打开文件<br />
CTRL + SHIFT + O打开项目<br />
CTRL + SHIFT + C显示类视图窗口<br />
F4 显示属性窗口<br />
SHIFT + F4显示项目属性窗口<br />
CTRL + SHIFT + E显示资源视图<br />
F12 转到定义<br />
CTRL + F12转到声明<br />
CTRL + ALT + J对象浏览<br />
CTRL + ALT + F1帮助目录<br />
CTRL + F1 动态帮助&nbsp;<br />
F1 帮助<br />
SHIFT + F1当前窗口帮助<br />
CTRL + ALT + F3帮助-搜索<br />
SHIFT + ALT + ENTER全屏显示<br />
CTRL + -向后定位<br />
CTRL + SHIFT + -向前定位<br />
CTRL + F4关闭文档窗口<br />
CTRL + PAGE DOWN光标定位到窗口上方<br />
CTRL + PAGE UP光标定位到窗口下方<br />
CTRL + F6<br />
CTRL + TAB下一个文档窗口<br />
CTRL + SHIFT + F6<br />
CTRL + SHIFT + TAB上一个文档窗口<br />
ALT + F6下一个面板窗口<br />
CTRL + K, CTRL + L取消remark<br />
CTRL + K, CTRL + C注释选择的代码<br />
CTRL + K, CTRL + U取消对选择代码的注释<br />
CTRL + M, CTRL + O折叠代码定义<br />
CTRL + M, CTRL + L展开代码定义<br />
CTRL + DELETE删除至词尾<br />
CTRL + BACKSPACE删除至词头<br />
SHIFT + TAB取消制表符<br />
CTRL + U转小写<br />
CTRL + SHIFT + U转大写<br />
CTRL + SHIFT + END选择至文档末尾<br />
CTRL + SHIFT + HOME选择至文档末尾开始<br />
SHIFT + END选择至行尾<br />
SHIFT + HOME选择至行开始处<br />
SHIFT + ALT + END垂直选择到最后尾<br />
SHIFT + ALT + HOME垂直选择到最前面<br />
CTRL + A全选<br />
CTRL + W选择当前单词<br />
CTRL + SHIFT + PAGE UP选择至本页前面<br />
CTRL + SHIFT + PAGE DOWN选择至本页后面<br />
CTRL + END文档定位到最后<br />
CTRL + HOME文档定位到最前<br />
CTRL + G转到&#8230;<br />
CTRL + K, CTRL + P上一个标签<br />
CTRL + K, CTRL + N下一个标签<br />
ALT + F10调试-ApplyCodeChanges&nbsp;<br />
CTRL + ALT+ Break停止调试<br />
CTRL + SHIFT + F9 取消所有断点<br />
CTRL + F9允许中断<br />
CTRL + SHIFT + F5调试-重新开始<br />
F5运行调试<br />
CTRL + F5运行不调试<br />
F10跨过程序执行<br />
F11单步逐句执行<br />
CTRL + J列出成员&nbsp;<br />
CTRL + PAGE DOWN下一个视图<br />
CTRL + B格式-粗体<br />
CTRL + SHIFT + T格式-文字缩进&nbsp;</p>
<p>调试快捷键</p>
<p>F6: 生成解决方案<br />
Ctrl+F6: 生成当前项目<br />
F7: 查看代码<br />
Shift+F7: 查看窗体设计器<br />
F5: 启动调试<br />
Ctrl+F5: 开始执行(不调试)<br />
Shift+F5: 停止调试<br />
Ctrl+Shift+F5: 重启调试<br />
F9: 切换断点<br />
Ctrl+F9: 启用/停止断点<br />
Ctrl+Shift+F9: 删除全部断点<br />
F10: 逐过程<br />
Ctrl+F10: 运行到光标处<br />
F11: 逐语句</p>
<p><br />
编辑快捷键</p>
<p>Shift+Alt+Enter: 切换全屏编辑<br />
Ctrl+B,T / Ctrl+K,K: 切换书签开关<br />
Ctrl+B,N / Ctrl+K,N: 移动到下一书签<br />
Ctrl+B,P: 移动到上一书签<br />
Ctrl+B,C: 清除全部标签<br />
Ctrl+I: 渐进式搜索<br />
Ctrl+Shift+I: 反向渐进式搜索<br />
Ctrl+F: 查找<br />
Ctrl+Shift+F: 在文件中查找<br />
F3: 查找下一个<br />
Shift+F3: 查找上一个<br />
Ctrl+H: 替换<br />
Ctrl+Shift+H: 在文件中替换<br />
Alt+F12: 查找符号(列出所有查找结果)<br />
Ctrl+Shift+V: 剪贴板循环<br />
Ctrl+左右箭头键: 一次可以移动一个单词<br />
Ctrl+上下箭头键: 滚动代码屏幕，但不移动光标位置。<br />
Ctrl+Shift+L: 删除当前行<br />
Ctrl+M,M: 隐藏或展开当前嵌套的折叠状态<br />
Ctrl+M,L: 将所有过程设置为相同的隐藏或展开状态<br />
Ctrl+M,P: 停止大纲显示<br />
Ctrl+E,S: 查看空白<br />
Ctrl+E,W: 自动换行<br />
Ctrl+G: 转到指定行<br />
Shift+Alt+箭头键: 选择矩形文本<br />
Alt+鼠标左按钮: 选择矩形文本<br />
Ctrl+Shift+U: 全部变为大写<br />
Ctrl+U: 全部变为小写</p>
<p>代码快捷键</p>
<p>Ctrl+J / Ctrl+K,L: 列出成员<br />
Ctrl+Shift+空格键 / Ctrl+K,P: 参数信息<br />
Ctrl+K,I: 快速信息<br />
Ctrl+E,C / Ctrl+K,C: 注释选定内容<br />
Ctrl+E,U / Ctrl+K,U: 取消选定注释内容<br />
Ctrl+K,M: 生成方法存根<br />
Ctrl+K,X: 插入代码段<br />
Ctrl+K,S: 插入外侧代码<br />
F12: 转到所调用过程或变量的定义</p>
<p>窗口快捷键</p>
<p>Ctrl+W,W: 浏览器窗口<br />
Ctrl+W,S: 解决方案管理器<br />
Ctrl+W,C: 类视图<br />
Ctrl+W,E: 错误列表<br />
Ctrl+W,O: 输出视图<br />
Ctrl+W,P: 属性窗口<br />
Ctrl+W,T: 任务列表<br />
Ctrl+W,X: 工具箱<br />
Ctrl+W,B: 书签窗口<br />
Ctrl+W,U: 文档大纲<br />
Ctrl+D,B: 断点窗口<br />
Ctrl+D,I: 即时窗口<br />
Ctrl+Tab: 活动窗体切换<br />
Ctrl+Shift+N: 新建项目<br />
Ctrl+Shift+O: 打开项目<br />
Ctrl+Shift+S: 全部保存<br />
Shift+Alt+C: 新建类<br />
Ctrl+Shift+A: 新建项</p>
<p><br />
VS2005的隐藏快捷键&nbsp;<br />
&nbsp;<br />
这里我将会把一些无意中发现的VS2005中没有明确指出的快捷键共享出来，并不是所有的快捷键，或者常见的一些快捷键。<br />
1、Ctrl+Space直接完成类或函数（本来这个并不算隐藏的快捷键，但是因为中文输入法抢占这个快捷键，所以。。。，替代的快捷键是Alt+Right）<br />
2、Shift+Delete整行删除，并且将这一行放到剪贴板（这时候不能选中一段内容）<br />
3、Shift+Insert粘贴，有点匪夷所思，Ctrl+V就可以了，大概是为了和Shift+Delete对应吧<br />
4、Ctrl+Up，Ctrl+Down滚动编辑器，但尽量不移动光标，光标保证在可见范围内<br />
5、Ctrl+BackSpace，Ctrl+Delete整词删除，有的时候很有用<br />
6、Ctrl+Left，Ctrl+Right按整词移动光标（不算隐藏，和前面几条加起来就是Ctrl光标控制套件了）<br />
7、Alt+Shift+F10打开执行改名，实现接口和抽象类的小窗口（还可以用Ctrl+.，不过有的中文输入法用到这个）<br />
8、Shift+F9调试是打开QuickWatch，内容是当前光标所在处的内容<br />
9、F12转跳到定义，很有用的快捷键<br />
10、Shift+F12查找所有引用<br />
11、Ctrl+F10=F5，开始Debug<br />
12、Ctrl+F6循环察看代码窗口，有点Ctrl+Tab的感觉<br />
13、Ctrl+F3查找当前光标选中的内容，可以和F3配合使用<br />
14、Ctrl+F2将焦点转移到类的下拉框上<br />
15、Alt+F7=Ctrl+Tab<br />
16、Alt+F11新开VS2005并编辑宏<br />
17、Alt+F12查找=Ctrl+F</p>
<img src ="http://www.cnblogs.com/cnherman/aggbug/1031612.html?type=2" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/41953/" target="_blank">[新闻]Mac OS X 10.5.5 Build 9F23 测试版和 Safari 4 预览版</a>]]></description></item><item><title>2008年我来了...呵呵,我也跟风.</title><link>http://www.cnblogs.com/cnherman/articles/Cn_Herman.html</link><dc:creator>Herman.Wong</dc:creator><author>Herman.Wong</author><pubDate>Mon, 31 Dec 2007 09:43:00 GMT</pubDate><guid>http://www.cnblogs.com/cnherman/articles/Cn_Herman.html</guid><wfw:comment>http://www.cnblogs.com/cnherman/comments/1021745.html</wfw:comment><comments>http://www.cnblogs.com/cnherman/articles/Cn_Herman.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/cnherman/comments/commentRss/1021745.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/cnherman/services/trackbacks/1021745.html</trackback:ping><description><![CDATA[这几天在公司闲着,无聊,于是研究了一下URL重写.不过没有写完代码.贴出来权当是保存.<br />
<br />
一下是<font face="Courier New">ReUrlModule.HttpModule</font>的所有类.<br />
<p><font face="Courier New">using System;<br />
using System.Collections.Generic;<br />
using System.Text;<br />
using System.Text.RegularExpressions;</font></p>
<p><font face="Courier New">namespace ReUrlModule.HttpModule<br />
{<br />
&nbsp;&nbsp;&nbsp; sealed class URLrewrite<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static string[] strImgs<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new string[] { ".jpg",".gif",".bmp",".tif"};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static&nbsp; string strRewrite(string strRequestURL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int I = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; strImgs.Length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strRequestURL.IndexOf(strImgs[i]) &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (I &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strRequestURL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strQuerys(strRequestURL)[1].Replace("/","") +"|"+ strQuerys(strRequestURL)[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static string strRewriteContext(string strRequestURL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int I = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; strImgs.Length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strRequestURL.IndexOf(strImgs[i]) &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; I += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (I &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strRequestURL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return strQuerys(strRequestURL)[1] + "?" + strQuerys(strRequestURL)[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<font face="Courier New">
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static string strRepUrl(string strURL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string str = strURL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] tmpstring = new string[3] { "http",":",@"//"};</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; tmpstring.Length; i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = str.ToLower().Replace(tmpstring[i], "");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iEnd = str.IndexOf("/");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; str = str.Replace(str.Substring(0,iEnd),"");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static string strQuery(string strUrl)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //strUrl = strRepUrl(strUrl);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strUrl.IndexOf("?") &gt; 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iStart = strUrl.IndexOf("?") + 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iLength = strUrl.Length;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string tmp = strUrl.Substring(iStart, iLength - iStart);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return " ";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static string[] strQuerys(string strURL)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string tmpQuery = strQuery(strURL);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string tmpURL = strRepUrl(strURL).Replace(tmpQuery,"").Replace("?","");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int iLast = tmpURL.LastIndexOf("/")+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tmpURL = tmpURL.Substring(0, iLast);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string[] tmp = new string[2] {tmpQuery,tmpURL };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return tmp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />