<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_yeerh</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/41180/rss</id><updated>2012-01-31T14:29:48Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/41180/rss"/><entry><id>http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html</id><title type="text">再谈脏字过滤（基于hash的优化算法）</title><summary type="text">前段时间写了篇文章。说的trie算法原文见http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html回复中有说到一个很快的方法。原文见xingd的博客http://www.cnblogs.com/xingd/archive/2008/02/01/1061800.html经测试，这种方法确实很快，但已不是单纯的hash算法了,其中的思路比较巧妙。文章中基本上只有代码，只有很少的说明。经过本人的认真阅读，终于搞懂了优化的关键所在。现在对这种做了一个小的改动，不敢独独享，特分享给大家。这种优化基于我们本常所用的大部分词或是字并不是脏字的前</summary><published>2011-10-20T07:46:00Z</published><updated>2011-10-20T07:46:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html"/><content type="html">&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: 'Verdana'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;前段时间写了篇文章。说的&lt;font face="Verdana"&gt;trie&lt;/font&gt;&lt;font face="宋体"&gt;算法&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;原文见&lt;/span&gt;&lt;span style="font-family: 'Verdana'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: 'Verdana'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html&lt;/span&gt;&lt;span style="font-family: 'Verdana'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;回复中有说到一个很快的方法&amp;nbsp;。原文见&lt;/span&gt;&lt;span&gt;&lt;a href="http://home.cnblogs.com/u/xingd/"&gt;&lt;span style="font-family: 'Verdana';background: rgb(238,238,238); color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'; mso-shading: rgb(238,238,238)"&gt;xingd&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体';background: rgb(238,238,238); color: rgb(0,0,0); font-size: 9pt; mso-spacerun: 'yes'; mso-shading: rgb(238,238,238)"&gt;的博客&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span&gt;&lt;a href="http://www.cnblogs.com/xingd/archive/2008/02/01/1061800.html"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10.5pt; text-decoration: underline; mso-spacerun: 'yes'" &gt;http://www.cnblogs.com/xingd/archive/2008/02/01/1061800.html&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;经测试，这种方法确实很快，但已不是单纯的&lt;font face="Verdana"&gt;hash&lt;/font&gt;&lt;font face="宋体"&gt;算法了,其中的思路比较巧妙。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;文章中基本上只有代码，只有很少的说明。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;经过本人的认真阅读，终于搞懂了优化的关键所在。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;现在对这种做了一个小的改动，不敢独独享，特分享给大家。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;这种优化基于我们本常所用的大部分词或是字并不是脏字的前提。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;有些字符即使在脏字单词中出现，他们出现地位置也不一样。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;根据这个特点。我们先建立一个用于快速过滤的数组。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;Uint16[]&amp;nbsp;m_fastCheck&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Uint16[char.MaxValue];&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;fastCheck&lt;font face="宋体"&gt;的索引号用来表示对应的字符。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;里面的值&amp;nbsp;表示这个字符在单词中出现的位置，我们用&lt;font face="Times New Roman"&gt;Uint16&lt;/font&gt;&lt;font face="宋体"&gt;来表示，&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;也就可以保存&lt;font face="Times New Roman"&gt;1-16&lt;/font&gt;&lt;font face="宋体"&gt;。。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;比如：马这个字符&lt;font face="Times New Roman"&gt;,&amp;nbsp;&lt;/font&gt;&lt;font face="宋体"&gt;脏字有&amp;nbsp;&lt;/font&gt;&lt;font face="Times New Roman"&gt;"&lt;/font&gt;&lt;font face="宋体"&gt;你马&lt;/font&gt;&lt;font face="Times New Roman"&gt;",&amp;nbsp;'&lt;/font&gt;&lt;font face="宋体"&gt;马的&lt;/font&gt;&lt;font face="Times New Roman"&gt;'&amp;nbsp;,&amp;nbsp;'&lt;/font&gt;&lt;font face="宋体"&gt;草泥马&lt;/font&gt;&lt;font face="Times New Roman"&gt;'&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;则&amp;nbsp;&lt;font face="Times New Roman"&gt;fastCheck[39532]&amp;nbsp;=&amp;nbsp;0x07;&amp;nbsp;&amp;nbsp;//'&lt;/font&gt;&lt;font face="宋体"&gt;马&lt;/font&gt;&lt;font face="Times New Roman"&gt;'&lt;/font&gt;&lt;font face="宋体"&gt;转化为数字为&lt;/font&gt;&lt;font face="Times New Roman"&gt;39532&lt;/font&gt;&lt;font face="宋体"&gt;；&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;因为字符可以隐式转换为整数。也可以写作&amp;nbsp;&lt;font face="Times New Roman"&gt;fastCheck['&lt;/font&gt;&lt;font face="宋体"&gt;马&lt;/font&gt;&lt;font face="Times New Roman"&gt;']&amp;nbsp;=&amp;nbsp;0x07;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;至于这个&lt;font face="Times New Roman"&gt;0x07&lt;/font&gt;&lt;font face="宋体"&gt;是怎么来的。因为马出现的位置有&amp;nbsp;&lt;/font&gt;&lt;font face="Times New Roman"&gt;1&lt;/font&gt;&lt;font face="宋体"&gt;，&lt;/font&gt;&lt;font face="Times New Roman"&gt;2&lt;/font&gt;&lt;font face="宋体"&gt;，&lt;/font&gt;&lt;font face="Times New Roman"&gt;3&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;对这些位置做位运算就可以得出&lt;font face="Times New Roman"&gt;7.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;这个我们在添加关键中的时候就可以初始化。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;public&amp;nbsp;void&amp;nbsp;AddKey(string&amp;nbsp;word)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;{.................&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;for(int&amp;nbsp;i=0;i&amp;lt;word.Length;i++)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_fastCheck[word[i]]&amp;nbsp;|=&amp;nbsp;(UInt16)(1&amp;lt;&amp;lt;i);&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;有了这个，我们可以快速排除一些不是脏字字符。还可以更快吗？&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;可以，我们再加一个首尾字符的判断。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;Uint16[]&amp;nbsp;m_startCheck&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Uint16[char.MaxValue];&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;Uint16[]&amp;nbsp;m_endCheck&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Uint16[char.MaxValue];&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;而这种我们保存的不是字符出现的位置。而是保存词的长度。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;public&amp;nbsp;void&amp;nbsp;AddKey(string&amp;nbsp;word)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;{.................&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;for(int&amp;nbsp;i=0;i&amp;lt;word.Length;i++)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_fastCheck[word[i]]&amp;nbsp;|=&amp;nbsp;(UInt16)(1&amp;lt;&amp;lt;i);&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;Uint16&amp;nbsp;mask&amp;nbsp;=&amp;nbsp;(UInt16)(1&amp;lt;&amp;lt;word.Length-1);&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;m_startCheck[word[0]]&amp;nbsp;&amp;nbsp;|=&amp;nbsp;mask;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; text-indent: 21pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;m_endCheck[word[word.Length-1]]&amp;nbsp;|=&amp;nbsp;&amp;nbsp;mask;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;就这样，在进行查找的时候。我们先判断对应位置的字符出现地位置是否正确，&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;再判断首尾字符的长度是否要求。如果这些条件都满足，再进行&lt;font face="Times New Roman"&gt;hash&lt;/font&gt;&lt;font face="宋体"&gt;查找。&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;方法如下：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;public&amp;nbsp;string&amp;nbsp;FindOne(string&amp;nbsp;text)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;index&amp;nbsp;=&amp;nbsp;0;&amp;nbsp;index&amp;nbsp;&amp;lt;&amp;nbsp;text.Length;&amp;nbsp;index++)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;count&amp;nbsp;=&amp;nbsp;0;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;maxIndex&amp;nbsp;=&amp;nbsp;Math.Min(maxWordLength&amp;nbsp;+&amp;nbsp;index,&amp;nbsp;text.Length);&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char&amp;nbsp;begin&amp;nbsp;=&amp;nbsp;text[index];&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for&amp;nbsp;(int&amp;nbsp;j&amp;nbsp;=&amp;nbsp;index;&amp;nbsp;j&amp;nbsp;&amp;lt;&amp;nbsp;maxIndex;&amp;nbsp;j++)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char&amp;nbsp;current&amp;nbsp;=&amp;nbsp;text[j];&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UInt16&amp;nbsp;mask&amp;nbsp;=&amp;nbsp;(UInt16)(1&amp;nbsp;&amp;lt;&amp;lt;&amp;nbsp;count);&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;font face="宋体"&gt;先判断字符出现的位置是否正确&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;((m_fastCheck[current]&amp;nbsp;&amp;amp;&amp;nbsp;mask)&amp;nbsp;==&amp;nbsp;0)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;index&amp;nbsp;+=&amp;nbsp;count;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;break;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;++count;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;font face="宋体"&gt;再判断首字符和尾字符的长度是否正确&lt;/font&gt;&lt;font face="Times New Roman"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;((m_startLength[begin]&amp;nbsp;&amp;amp;&amp;nbsp;mask)&amp;nbsp;&amp;gt;&amp;nbsp;0&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;(m_endLength[current]&amp;nbsp;&amp;amp;&amp;nbsp;mask)&amp;nbsp;&amp;gt;&amp;nbsp;0)&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&lt;font face="宋体"&gt;进行&lt;/font&gt;&lt;font face="Times New Roman"&gt;hash&lt;/font&gt;&lt;font face="宋体"&gt;比较&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.........................&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;string.Empty;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;至此，整个查找方法就完成了。脏字替换跟查找的方法差不多。&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;为了减少字符串的截取，我重写了一个&lt;font face="Times New Roman"&gt;HashSet,&amp;nbsp;&lt;/font&gt;&lt;font face="宋体"&gt;支持&lt;/font&gt;&lt;font face="Times New Roman"&gt;bool&amp;nbsp;&amp;nbsp;Contains(string&amp;nbsp;text,int&amp;nbsp;offset,int&amp;nbsp;coung)&lt;/font&gt;&lt;font face="宋体"&gt;的方式进行调用&lt;/font&gt;&lt;font face="Times New Roman"&gt;.&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;完整的代码下载：&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span&gt;&lt;a href="http://files.cnblogs.com/yeerh/Filter2.7z"&gt;&lt;span style="font-family: '宋体'; color: rgb(0,0,255); font-size: 10.5pt; text-decoration: underline; mso-spacerun: 'yes'" &gt;http://files.cnblogs.com/yeerh/Filter2.7z&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p style="margin-top: 0pt; margin-bottom: 0pt" &gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt; mso-spacerun: 'yes'"&gt;&lt;o:p&gt;15:15 2011-12-21 更新版，修正了一些小bug&lt;br /&gt;&lt;a href="http://files.cnblogs.com/yeerh/Filter3.7z"&gt;http://files.cnblogs.com/yeerh/Filter3.7z&lt;/a&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--EndFragment--&gt;  &lt;img src="http://www.cnblogs.com/yeerh/aggbug/2219035.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yeerh/archive/2011/10/20/2219035.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html</id><title type="text">高效的关键字过滤及查找算法（Trie KO Hash）</title><summary type="text">在实际当中，聊天过滤工作 最终可能会消耗掉可观的（有时是惊人的）资源总量--无论是从开发方面还是从原始计算能力方面来说。有些知名SNS类游戏仅在聊天过滤上就耗费了超过50%的计算资源。因此对于这部分的优化工作就显得特别重要。最近做游戏服务器，需要用到聊天过滤，首先想到的是使用HashSet&amp;lt;string&amp;gt; 的方式。基本的思路是把所有需要过滤的关键字保存在HashSet&amp;lt;string&amp;gt;中。对于用户输入的消息进行暴力分割。如：今天你好吗单个字符分割为： 今/天/你/好/吗2个字符分割为： 今天/天你/你好/好吗3个字符分割为： 今天你/天你好/你好吗..........以此</summary><published>2011-08-24T14:27:00Z</published><updated>2011-08-24T14:27:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html"/><content type="html">&lt;p&gt;在实际当中，聊天过滤工作 最终可能会消耗掉可观的（有时是惊人的）资源总量--无论是从开发方面还是从原始计算能力方面来说。有些知名SNS类游戏仅在聊天过滤上就耗费了超过50%的计算资源。因此对于这部分的优化工作就显得特别重要。&lt;/p&gt;&#xD;
&lt;p&gt;最近做游戏服务器，需要用到聊天过滤，首先想到的是使用HashSet&amp;lt;string&amp;gt; 的方式。&lt;/p&gt;&#xD;
&lt;p&gt;基本的思路是把所有需要过滤的关键字保存在HashSet&amp;lt;string&amp;gt;中。&lt;/p&gt;&#xD;
&lt;p&gt;对于用户输入的消息进行暴力分割。&lt;/p&gt;&#xD;
&lt;p&gt;如：今天你好吗&lt;/p&gt;&#xD;
&lt;p&gt;单个字符分割为： 今/天/你/好/吗&lt;/p&gt;&#xD;
&lt;p&gt;2个字符分割为： 今天/天你/你好/好吗&lt;/p&gt;&#xD;
&lt;p&gt;3个字符分割为： 今天你/天你好/你好吗&lt;/p&gt;&#xD;
&lt;p&gt;..........以此类推&lt;/p&gt;&#xD;
&lt;p&gt;对于大的字符串。我们对分割把分割的长度限制为需过滤关键字的长度。&lt;/p&gt;&#xD;
&lt;p&gt;然后对分割的了字符串进行匹配。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('14162bb5-cf9b-49bd-9bb7-55add35cd929')"&gt;&lt;img style="display: none" id="code_img_opened_14162bb5-cf9b-49bd-9bb7-55add35cd929"  onclick="cnblogs_code_hide('14162bb5-cf9b-49bd-9bb7-55add35cd929',event)" src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif"&gt;&#xD;
&lt;div id="cnblogs_code_open_14162bb5-cf9b-49bd-9bb7-55add35cd929" &gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashFilter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m_maxLen;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;关键字最大长度&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m_keys&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;HashSet&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;插入新的Key.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="name"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;((&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.IsNullOrEmpty(key))&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m_keys.Add(key)&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m_maxLen)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_maxLen&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key.Length;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;检查是否包含非法字符&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="text"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;输入文本&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;找到的第1个非法字符.没有则返回string.Empty&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FindOne(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;len&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;len&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Length;&amp;nbsp;len&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;maxIndex&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Length&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;len;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;index&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;maxIndex;&amp;nbsp;index&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Substring(index,&amp;nbsp;len);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(m_keys.Contains(key))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;这个方式有个缺点.就是使用 String.Substring会创建大量临时对象.&lt;/p&gt;&#xD;
&lt;p&gt;即便是使用了最大长度进行分割字符串的控件.在需要过滤的字符串较长时,还是不见得高效.&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;Trie&lt;/strong&gt;，又称&lt;strong&gt;单词查找树&lt;/strong&gt;或&lt;strong&gt;键树&lt;/strong&gt;，是一种&lt;a title="树 (图论)" href="http://zh.wikipedia.org/wiki/%E6%A0%91_(%E5%9B%BE%E8%AE%BA)"&gt;树&lt;/a&gt;形结构，是一种&lt;a  title="哈希" href="http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C"&gt;哈希&lt;/a&gt;树的变种。它的优点是：最大限度地减少无谓的字符串比较，查询效率比&lt;a title="哈希表" href="http://zh.wikipedia.org/wiki/%E5%93%88%E5%B8%8C%E8%A1%A8"&gt;哈希表&lt;/a&gt;高。&lt;/p&gt;&#xD;
&lt;p&gt;我们先来看一个Trie结构的例子&lt;/p&gt;&#xD;
&lt;p&gt;&lt;img border="0" alt="" src="http://images.cnblogs.com/cnblogs_com/yeerh/400px-Trie_example_svg.png" width="400" height="375" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在这个Trie结构中，保存了A、to、tea、ted、ten、i、in、inn这8个字符串&lt;/p&gt;&#xD;
&lt;p&gt;首先看我们如何实现这个结构：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TrieFilter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Char&amp;nbsp;m_key;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Dictionary&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Char,&amp;nbsp;TrieFilter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;m_values;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//根节点，不包含字符，即m_key='\0';&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TrieFilter()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_values&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Dictionary&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Char,&amp;nbsp;TrieFilter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//用于创建子节点&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TrieFilter(Char&amp;nbsp;key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_key&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_values&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Dictionary&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;Char,&amp;nbsp;TrieFilter&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;添加关键字&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="key"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;AddKey(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.IsNullOrEmpty(key))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TrieFilter&amp;nbsp;node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;this&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(var&amp;nbsp;c&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;in&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;key)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TrieFilter&amp;nbsp;subnode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #000000"&gt;!&lt;/span&gt;&lt;span style="color: #000000"&gt;node.m_values.TryGetValue(c,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;subnode))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;subnode&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;TrieFilter(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;node.m_values.Add(c,&amp;nbsp;subnode);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;node&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;subnode;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //最后的结点，表示单词结束，用&amp;#8216;\0&amp;#8217;表示，指向一个空对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;node.m_values[&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\0&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;]&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;这样。一个C#的Trie结构就表示完成。。&lt;/p&gt;&#xD;
&lt;p&gt;下面我们来看看如何实现关键字查找&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;检查是否包含非法字符&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="text"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;输入文本&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;找到的第1个非法字符.没有则返回string.Empty&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;FindOne(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Length;&amp;nbsp;i&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TrieFilter&amp;nbsp;node;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(m_values.TryGetValue(text[i],&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;node))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;for&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;;&amp;nbsp;j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Length;&amp;nbsp;j&lt;/span&gt;&lt;span style="color: #000000"&gt;++&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(node.m_values.TryGetValue(text[j],&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;out&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;node))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(node.m_values.ContainsKey(&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #800000"&gt;\0&lt;/span&gt;&lt;span style="color: #800000"&gt;'&lt;/span&gt;&lt;span style="color: #000000"&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;text.Substring(i,&amp;nbsp;(j&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;-&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;i));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;break&lt;/span&gt;&lt;span style="color: #000000"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&#xD;
&lt;p&gt;是不是很简单呢？&lt;/p&gt;&#xD;
&lt;p&gt;把由蛮力匹配转变成基于Trie的匹配方案会极大的节省执行时间，这个比较对较长字符串进行匹配时更加明显。&lt;/p&gt;&#xD;
&lt;p&gt;对于长度在20左右的字符串。Tire的匹配速度比Hash的方式快了近10倍。&lt;/p&gt;&#xD;
&lt;p&gt;下面附上完整的代码下载&lt;/p&gt;&#xD;
&lt;p&gt;里面的BadWord.txt包括了7000多个敏感关键字。&amp;nbsp;&lt;/p&gt;&#xD;
&lt;p&gt;完整的代码及性能对比测试下载：&lt;a href="http://files.cnblogs.com/yeerh/FilterTest.rar"&gt;http://files.cnblogs.com/yeerh/FilterTest.rar&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;希望本文能对你有所帮助。欢迎拍砖。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yeerh/aggbug/2152607.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yeerh/archive/2011/08/24/2152607.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2010/07/12/1776013.html</id><title type="text">序列化</title><summary type="text">using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.IO;using System.Data;using System.Xml;using System.Runtime.Serialization.Json;using System.Runtime.Serial...</summary><published>2010-07-12T11:45:00Z</published><updated>2010-07-12T11:45:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2010/07/12/1776013.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2010/07/12/1776013.html"/><content type="html">&lt;p&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Xml;&lt;br /&gt;using System.Runtime.Serialization.Json;&lt;br /&gt;using System.Runtime.Serialization.Formatters.Binary;&lt;br /&gt;using System.Runtime.Serialization.Formatters.Soap;&lt;/p&gt;&#xD;
&lt;p&gt;namespace Cblang.Serialization&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 序列化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static class Serializers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 二进制序列化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="request"&amp;gt;要序列化的对象&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;MemoryStream&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static System.IO.MemoryStream SerializeBinary(object request)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BinaryFormatter serializer = new BinaryFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.MemoryStream memStream = new System.IO.MemoryStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.Serialize(memStream, request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return memStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 反序列化二进制对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="memStream"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static object DeSerializeBinary(System.IO.MemoryStream memStream)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memStream.Position = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BinaryFormatter deserializer = new BinaryFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object newobj = deserializer.Deserialize(memStream);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memStream.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return newobj;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;#region Binary Serializers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// 对象序列化为Bin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="data"&amp;gt;要序列化的对象&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static byte[] BinSerialize(this object data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BinaryFormatter formatter = new BinaryFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MemoryStream rems = new MemoryStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; formatter.Serialize(rems, data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return rems.GetBuffer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Bin反序列化为对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="data"&amp;gt;数据缓冲区&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;对象&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static object BinDeserialize(this byte[] data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BinaryFormatter formatter = new BinaryFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MemoryStream rems = new MemoryStream(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return formatter.Deserialize(rems);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;#endregion&lt;/p&gt;&#xD;
&lt;p&gt;#region Json序列化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Json序列化,用于发送到客户端&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static string JsonSerialize(this object item)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (MemoryStream ms = new MemoryStream())&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.WriteObject(ms, item);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string result = Encoding.UTF8.GetString(ms.ToArray());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return result;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// Json反序列化,用于接收客户端Json后生成对应的对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static T JsonDeserialize&amp;lt;T&amp;gt;(this string jsonString)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T jsonObject = (T)ser.ReadObject(ms);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return jsonObject;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/p&gt;&#xD;
&lt;p&gt;#region XML Serializers&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// XML 序列化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="request"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static System.IO.MemoryStream SerializeSOAP(object request)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapFormatter serializer = new SoapFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.IO.MemoryStream memStream = new System.IO.MemoryStream();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.Serialize(memStream, request);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return memStream;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;&#xD;
&lt;p&gt;/// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// XML 反序列化&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="memStream"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static object DeSerializeSOAP(System.IO.MemoryStream memStream)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; object sr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SoapFormatter deserializer = new SoapFormatter();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memStream.Position = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sr = deserializer.Deserialize(memStream);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; memStream.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sr;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region XML文件写DataSet&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="ds"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="fileName"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static void WriteXml(DataSet ds, string fileName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (File.Exists(fileName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; File.Delete(fileName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds.WriteXml(fileName, XmlWriteMode.WriteSchema);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;/summary&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;param name="fileName"&amp;gt;&amp;lt;/param&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static DataSet ReadXml(string fileName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (File.Exists(fileName))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //创建XmlTextReader对象&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlTextReader xReader = new XmlTextReader(fileName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //创建一个新的数据集&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataSet ds = new DataSet();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //从filexml中读出数据集&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ds.ReadXml(xReader, XmlReadMode.Auto);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ds;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yeerh/aggbug/1776013.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yeerh/archive/2010/07/12/1776013.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2010/07/06/1772535.html</id><title type="text">DirectShow相关</title><summary type="text">//得到PinHRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, const WCHAR * pinName, IPin **ppPin){IEnumPins *pEnum;IPin *pPin;HRESULT hr;hr = pFilter-&amp;gt;EnumPins(&amp;amp;pEnum);if (FAILED(hr))retur...</summary><published>2010-07-06T15:49:00Z</published><updated>2010-07-06T15:49:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1772535.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1772535.html"/><content type="html">&lt;p&gt;//得到Pin&lt;br /&gt;HRESULT GetPin(IBaseFilter *pFilter, PIN_DIRECTION PinDir, const WCHAR * pinName, IPin **ppPin)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;IEnumPins&amp;nbsp; *pEnum;&lt;br /&gt;&amp;nbsp;IPin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pPin;&lt;br /&gt;&amp;nbsp;HRESULT&amp;nbsp;&amp;nbsp;&amp;nbsp; hr;&lt;/p&gt;&#xD;
&lt;p&gt;hr = pFilter-&amp;gt;EnumPins(&amp;amp;pEnum);&lt;br /&gt;&amp;nbsp;if (FAILED(hr))&amp;nbsp;return hr;&lt;/p&gt;&#xD;
&lt;p&gt;while(pEnum-&amp;gt;Next(1, &amp;amp;pPin, 0) == S_OK)&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;PIN_INFO pInfo;&lt;br /&gt;&amp;nbsp;&amp;nbsp;hr = pPin-&amp;gt;QueryPinInfo(&amp;amp;pInfo);&lt;br /&gt;&amp;nbsp;&amp;nbsp;if (SUCCEEDED(hr) &amp;amp;&amp;amp; PinDir == pInfo.dir)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//检查名字是否相同,用于有多个输入或输出的Pin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(pinName != NULL &amp;amp;&amp;amp; wcsncmp(pInfo.achName,pinName,128) != 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pPin-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;continue;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;pEnum-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;*ppPin = pPin;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return S_OK;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;pPin-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;pEnum-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;return E_FAIL;&amp;nbsp; &lt;br /&gt;}&lt;/p&gt;&#xD;
&lt;p&gt;//连接Pin&lt;br /&gt;HRESULT ConnectFilters(IGraphBuilder *pGraph, IBaseFilter *pFirst, const WCHAR * pinOutName, IBaseFilter *pSecond, const WCHAR * pinInName)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;IPin *pOut = NULL, *pIn = NULL;&lt;br /&gt;&amp;nbsp;HRESULT hr = GetPin(pFirst, PINDIR_OUTPUT, pinOutName, &amp;amp;pOut);&lt;br /&gt;&amp;nbsp;if (FAILED(hr)) return hr;&lt;br /&gt;&amp;nbsp;hr = GetPin(pSecond, PINDIR_INPUT, pinInName, &amp;amp;pIn);&lt;br /&gt;&amp;nbsp;if (FAILED(hr)) &lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;pOut-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;&amp;nbsp;return E_FAIL;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;hr = pGraph-&amp;gt;Connect(pOut, pIn);&lt;br /&gt;&amp;nbsp;pIn-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;pOut-&amp;gt;Release();&lt;br /&gt;&amp;nbsp;return hr;&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yeerh/aggbug/1772535.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1772535.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2010/07/06/1771876.html</id><title type="text">常用的源代码下载网址</title><summary type="text">http://www.codeplex.com/http://www.codeproject.com/http://sourceforge.net/http://code.google.com/intl/zh-CN/http://www.pudn.com/http://code.msdn.microsoft.com/微软的开发资源下载http://msdn.microsoft.com/zh-cn/...</summary><published>2010-07-06T01:16:00Z</published><updated>2010-07-06T01:16:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1771876.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1771876.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.codeplex.com/" target="_blank"&gt;http://www.codeplex.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/" target="_blank"&gt;http://www.codeproject.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/" target="_blank"&gt;http://sourceforge.net/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://code.google.com/intl/zh-CN/" target="_blank"&gt;http://code.google.com/intl/zh-CN/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pudn.com/" target="_blank"&gt;http://www.pudn.com/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.msdn.microsoft.com/" target="_blank"&gt;http://code.msdn.microsoft.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;微软的开发资源下载&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://msdn.microsoft.com/zh-cn/partners/aa570309.aspx" target="_blank"&gt;http://msdn.microsoft.com/zh-cn/partners/aa570309.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/search.aspx?displaylang=zh-cn" target="_blank"&gt;http://www.microsoft.com/downloads/search.aspx?displaylang=zh-cn&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/yeerh/aggbug/1771876.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/yeerh/archive/2010/07/06/1771876.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2009/05/19/1460350.html</id><title type="text">读取纯真IP数据库的公用组件（改进）</title><summary type="text">原文引用：http://www.cnblogs.com/hjf1223/archive/2008/06/19/QQWry_net.html改进后的下载地址：下载地址 性能：</summary><published>2009-05-19T08:44:00Z</published><updated>2009-05-19T08:44:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2009/05/19/1460350.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2009/05/19/1460350.html"/></entry><entry><id>http://www.cnblogs.com/yeerh/archive/2008/08/26/1276773.html</id><title type="text">支持断点续传和多线程的http下载类</title><summary type="text">源代码下载地址:http://files.cnblogs.com/yeerh/HttpDownload.rar 基于事件的Socket源码(带服务器端和客户端示例)http://files.cnblogs.com/yeerh/SocketDemo.rar</summary><published>2008-08-26T08:07:00Z</published><updated>2008-08-26T08:07:00Z</updated><author><name>边城浪</name><uri>http://www.cnblogs.com/yeerh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/yeerh/archive/2008/08/26/1276773.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/yeerh/archive/2008/08/26/1276773.html"/></entry></feed>
