﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>涂雅 &#187; .Net</title>
	<atom:link href="http://iove.net/category/tech/dot-net/feed" rel="self" type="application/rss+xml" />
	<link>http://iove.net</link>
	<description>致力Web技术研究，关注互联网热点</description>
	<lastBuildDate>Fri, 23 Dec 2011 03:40:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>今天晚上博客停掉约4个小时</title>
		<link>http://iove.net/archives/1803.html</link>
		<comments>http://iove.net/archives/1803.html#comments</comments>
		<pubDate>Sun, 02 May 2010 16:24:50 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[改版]]></category>

		<guid isPermaLink="false">http://iove.net/?p=1803</guid>
        <description><![CDATA[涂雅导读：　　首先向访问的朋友说说声对不起，今天晚上许多来访者吃了个闭门羹，呵呵，不过我一直在处理，直到刚才才处理好，因为我家里的网速比较慢，所以排查问题花了不少时间。
...
　　说下排查的经过吧，我现在的博客是我前几天花了一些时间加了一个拦截器，增加了24小时排行版、30天排行版、访客留言添加了所在位置、不少数据都做了缓存处理等功能，这部分的改造我下次将会讲到。由于我采用的解决方案是由xslt+xml实时生成内容输出到页面，所以当某个用户访问了这个页面的时候，就出现了我前面讲到的问题。<table class="wumii-related-items" cellspacing="0" cellpadding="2" border="0" width="100%" style="clear: both;">
    
    <tr>
        <td ><b><font size="-1"  style="display: block !important; padding: 20px 0 5px !important;">您可能也喜欢：</font></b></td>
    </tr>
    
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fiove.net%2Farchives%2F1864.html&from=http%3A%2F%2Fiove.net%2Farchives%2F1803.html">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">36小时急行军——全面改造Wordpress（诱因）</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fiove.net%2Farchives%2F1873.html&from=http%3A%2F%2Fiove.net%2Farchives%2F1803.html">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">36小时急行军——全面改造Wordpress(分析)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fiove.net%2Farchives%2F1877.html&from=http%3A%2F%2Fiove.net%2Farchives%2F1803.html">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">36小时急行军——全面改造Wordpress(解决方案)</font>
                    </a>
                </td>
            </tr>
            <tr>
                <td style="margin: 0 !important; padding: 0 !important; line-height: 20px !important;">
                    <img border="0" src="http://static.wumii.com/images/widget/widget_solidPoint.gif">
                    <a target="_blank" style="text-decoration: none !important;" href="http://app.wumii.com/ext/redirect.htm?url=http%3A%2F%2Fiove.net%2Farchives%2F1046.html&from=http%3A%2F%2Fiove.net%2Farchives%2F1803.html">
                        <font size="-1" color="#333333" style="line-height: 1.65em; font-size: 12px !important;">博客搬家地址改变——升级版</font>
                    </a>
                </td>
            </tr>
    
    <tr>
        <td  align="right">
            <a style="text-decoration: none !important;" href="http://www.wumii.com/widget/relatedItems.htm" target="_blank" title="无觅相关文章插件">
                <font size="-1" color="#bbbbbb" style="display: block !important; font-family: arial !important; padding: 5px 0 !important; font-size: 12px !important; color: #bbb !important;">无觅</font>
            </a>
        </td>
    </tr>
</table><br />全文：
		<p>　　首先向访问的朋友说说声对不起，今天晚上许多来访者吃了个闭门羹，呵呵，不过我一直在处理，直到刚才才处理好，因为我家里的网速比较慢，所以排查问题花了不少时间。<br />
　　问题的起因是由于我的一篇文章《实战设计模式之用组合模式实现JSON（六）》，ID为808的文章造成的，由于这篇文章是从word中复制过去了，当中包含了一些特殊字符（目前是估计，我还没有去查这篇文章，删除这篇文章问题已经解决，所以判断是包含特殊字符或者内容），造成了.net在作xslt+xml转换的时候CPU 100%运转，而我的服务器提供商Godaddy似乎有相应保护机制，当某个虚拟主机的CPU占用率超过设定值的时候，会自动停止这个虚拟主机的动态内容服务，为什么说只停动态内容呢，因为静态页面是一直可以访问的。<br />
　　说下排查的经过吧，我现在的博客是我前几天花了一些时间加了一个拦截器，增加了24小时排行版、30天排行版、访客留言添加了所在位置、不少数据都做了缓存处理等功能，这部分的改造我下次将会讲到。由于我采用的解决方案是由xslt+xml实时生成内容输出到页面，所以当某个用户访问了这个页面的时候，就出现了我前面讲到的问题。<br />
　　其实我使用xslt+xml做解决方案已经有三年了，我蛮喜欢这种解决方案的，可以达到数据和实现的完美分离。不过缺点也是有的，比如说xml对数据的要求很高，一方面是xml的元字符，而最重要的一点，则是编码问题，如果你采用了utf8做解释，而你的数据中包含unicode特殊字符的时候，肯定会出现错误。我以前就曾经出一过人民币符号解释出错的问题，后来采用了&ren;，但偶尔还是会出错，最后只好全部采用了gb2312进行解释。<br />
　　另外如果你是用.net进行xslt+xml的解释，还要注意一个问题，就是代码执行权限要求是Full Trust Level，而大部虚拟主机都是High Trust Level或者Medium Trust Level的，当然如果你是自己的服务器就不会存在这个问题了:P。<br />
　　之前在设计这个拦截器的就时候就准备了两种方案，一种是直接读数据库＋缓存，另一种是直接生成静态页面，生成静态页面的好处是只要服务器没有宕机就可以访问，但不好的地方是实时性不强，所以我在24小时排行等地方都采用了Ajax进行获取。所以这次有问题之后我就考虑干脆使用静态页面方案算了，速度上肯定会比较快，而且不会受服务器的影响，毕竟虚拟主机谁都有可能占用CPU100%，如果是使用静态页只要主机不挂掉，基本上都可以保证能访问。<br />
　　最终查出问题的是生成静态面的时候，当到了808（呵，这个ID真不错，可惜没干好事），发现我本机的CPU占用100%，一查进程，是w3wp这个进程一直在100%地占用着CPU，郁闷 。<br />
　　刚刚又发现一个奇怪的问题，如果我使用aspx直接去访问某个页面，会了直处理请求状态，服务器一直无响应，但如果我使用url rewite重写一个非aspx的url，则可以访问，在我本地没事，奇怪，有知道的朋友告诉一声是怎么回事。另外还有一个奇怪的问题，我数据库链接是使用using，但却报连接池超时的错误，甚至导致mysql不能访问（或者是巧合，godaddy的服务器经常性不能访问），本地没有发现问题。<br />
　　呵呵，现在是凌晨0点47分，发现还有十来个人正在访问我博客，同志们，你们辛苦了，这么晚了也要注意休息哈，我是来不起了，准备一会儿去见周公，你们也跟随我吧，哈哈。</p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/1803.html">http://iove.net/archives/1803.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/net" rel="tag">.net</a>,<a href="http://iove.net/tag/wordpress" rel="tag">wordpress</a>,<a href="http://iove.net/tag/%e6%94%b9%e7%89%88" rel="tag">改版</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech/wordpress-tech" title="查看 wordpress 的全部文章" rel="category tag">wordpress</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/1803.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>一场关于语言之争</title>
		<link>http://iove.net/archives/1532.html</link>
		<comments>http://iove.net/archives/1532.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 07:05:45 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[IT技术]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[开发语言]]></category>
		<category><![CDATA[语言之争]]></category>

		<guid isPermaLink="false">http://conis.cn/1532/</guid>
        <description><![CDATA[涂雅导读：公司最近要新招聘一人，引发由来以久的语言之争，是选择.Net还是Java？公司现有的所有项目都是.Net做的，如果改用Java，或者另起一套Java的班子，会有什么结果？我认为：
...
我们需要清楚地看到，对于绝大多数软件和网站来说，语言的选择并不重要，因为无论是Java、.Net，还是PHP或ASP，都可以完全胜任目前世界上 90%以上的网站。语言只是工具而已，关键是如何去利用。开发思想才是灵魂，万源同宗，殊途同归，当技术水平到达一定境界之后，完全可以抛开语言了。架构与设计、需求的分析与挖掘、项目质量与进度的控制、项目过程的持续改进、团队的培养，这些才是重要的。谁能说请楚，中文与英文之间的优劣？当然我们不能用三年级学生写的中文作文与大文豪写的英文小说，来对比中文与英文孰优孰劣。
...
<br />全文：
		<p>公司最近起了一场语言之争，我给公司高层发了一封邮件，下面是节选：</p>
<p>（前面略&#8230;.）我想就语言的选择谈谈我的看法，因为这个问题会对公司影响很大。我自己本身语言的涉猎比较广泛，实际项目中开发应用较多的有.Net，ASP，PHP，Delphi，Javascript等等，而对于Java，Objective-c、VB、VBA等语言也有应用，所以在语言选择方面，还是有一定的发言权，就目前网站开发的语言来说，主流的语言有四种：</p>
<p>大型网站开发：</p>
<ol>
<li>Java</li>
<li>.Net</li>
</ol>
<p>中小型网站开发</p>
<ol>
<li>PHP</li>
<li>ASP</li>
</ol>
<p>实际上就我们公司网站的规模来说，PHP和ASP完全可以很好的胜任，特别是PHP，功能强大，LAMP（Linux/Apache/Mysql/PHP囊括操作系统，Web服务器，开发语言，数据库）完全免费，这对企业来说，可以节省大量的资金。而就.Net与Java来讲，这两种语言是属于两个阵营，就如同华山派的剑宗与气宗，一个是由Sum公司主导的，一个是由Microsoft公司主导的，我们不谈它们之间的优劣，因为这个问题在业界和程序员之间已经争论了好多年了，这种学术流派的争论是完全没有任何意义的争论。</p>
<p>从历史上来讲，Java是前辈，出现得非常早，所以目前Java从业人员较多，许多早出现的网站，也多采用Java，这也就造成了java的高占有率。但选择开发语言不是下馆子，哪家人多去哪家。</p>
<p>.Net是微软为了对抗Java而推出的后起之秀，它可以说是站在巨人的肩膀上，吸众家语言之特长。但是，由于微软本身的特点，.Net不支持跨平台，也不开源，对于部分人来说，这可能是不可饶恕的。同时，IIS服务器当访问量到达一个量级的时候，会出现并发不足的问题，但问题是，我们什么时候可以到达这个量级，当我们真的到了这个量级的时候，是否可以通过集群器来解决问题？</p>
<p>我们需要清楚地看到，对于绝大多数软件和网站来说，语言的选择并不重要，因为无论是Java、.Net，还是PHP或ASP，都可以完全胜任目前世界上90%以上的网站。语言只是工具而已，关键是如何去利用。开发思想才是灵魂，万源同宗，殊途同归，当技术水平到达一定境界之后，完全可以抛开语言了。架构与设计、需求的分析与挖掘、项目质量与进度的控制、项目过程的持续改进、团队的培养，这些才是重要的。谁能说请楚，中文与英文之间的优劣？当然我们不能用三年级学生写的中文作文与大文豪写的英文小说，来对比中文与英文孰优孰劣。</p>
<p>一个公司对语言的选择，与公司现有的团队，公司的技术历史有着深厚的关系。如果一个以自有产品为主的公司出现多种主要语言，就意味着可能会有人力的浪费，也意味着高昂的维护成本和开发成本。</p>
<p>最后，我想说的是，如果‘<strong>若公司想在未来几年内想把“xx公司”做上市，改用</strong><strong>java</strong><strong>为低层支撑语言是不二的选择</strong>’的话，那么微软就不会世界上最成功的软件公司了，.Net早就应该消亡了，而不是市场占有率节节攀升了。</p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/1532.html">http://iove.net/archives/1532.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/net" rel="tag">.net</a>,<a href="http://iove.net/tag/java" rel="tag">java</a>,<a href="http://iove.net/tag/%e5%bc%80%e5%8f%91%e8%af%ad%e8%a8%80" rel="tag">开发语言</a>,<a href="http://iove.net/tag/%e8%af%ad%e8%a8%80%e4%b9%8b%e4%ba%89" rel="tag">语言之争</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech" title="查看 IT技术 的全部文章" rel="category tag">IT技术</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/1532.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>亲爱的web程序员，你看过你的源码么？</title>
		<link>http://iove.net/archives/1324.html</link>
		<comments>http://iove.net/archives/1324.html#comments</comments>
		<pubDate>Tue, 08 Dec 2009 13:23:02 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[IT技术]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[程序员]]></category>
		<category><![CDATA[网站访问速度]]></category>
		<category><![CDATA[网页速度]]></category>

		<guid isPermaLink="false">http://conis.cn/?p=1324</guid>
        <description><![CDATA[涂雅导读：　　我可以说，90%以上的程序员，从来不会去考虑用户体验，速度，SEO这类问题，他们是码代码的代码机器人，对于一个一两年以下工作经验的程序员来说，老老实实码代码是一件难能可贵的事，但如果对于一个两年工作以上的程序员，还在老老实实码代码，那就是一个粗劣的程序员了。当然，我并不是说你不要去做技术，去向管理层发展，而是你需要思考，做一个有思考的程序员。为什么我要这么做，我可以做得更好么？有什么新技术，有没有可持续性发展的方法？<br />全文：
		<p>我们很多程序员，特别是.net的程序员，在做了多年的开发之后，还是沉迷于拖控件的方式来解决问题，对于企业级的系统，如OA/CMS之类的B/S系统，当然不会有什么问题，因为基本上都是在内网，速度100M嘛。可是对于Internet的网站来说，这样做显然要不得，一方面，你在浪费的带宽，带宽是一个网站主要成本，对于一个规模网站来对，如果一个网站可以忽略带宽成本，那么其它成本基本上可以不计了。</p>
<p>我可以说，90%以上的程序员，从来不会去考虑用户体验，速度，SEO这类问题，他们是码代码的代码机器人，对于一个一两年以下工作经验的程序员来说，老老实实码代码是一件难能可贵的事，但如果对于一个两年工作以上的程序员，还在老老实实码代码，那就是一个粗劣的程序员了。当然，我并不是说你不要去做技术，去向管理层发展，而是你需要思考，做一个有思考的程序员。为什么我要这么做，我可以做得更好么？有什么新技术，有没有可持续性发展的方法？</p>
<p>还是说正题吧，我看过很多程序员写代码，从来不会Run一下关注一下HTML到底有多少行，有多少重复的的HTML和CSS，他们认为这是美工的事，美工说，我只负责设计好效果图，最多给你切过HTML出来。可是又有几个美工切出来的HTML是符合Web标准的HTML+CSS呢？所以我们常常会看到有如王大娘的裹脚布一样又臭又长，有数千行上万行的HTML代码，不说下载时间，浏览器解析都解析不过来，能不慢么？</p>
<p>怎么办？增加带宽？没技术含量的做法！我记得我以前带的一个项目组，有个新人说他们以前做了一个项目，客户老说慢，于是让客户加服务器，客户说我都加了N台服务器，可是还是慢啊！</p>
<p>所以说，增加带宽和和服务器并不是解决方案，你的服务器带宽再宽，客户端带宽改善不了，有什么用？你不能控制客户的带宽，这个是改变不了的，就算你有一TB的带宽，潮水般地向客户涌过去，客户一样只能接收50k/秒的数据。</p>
<p>其实一个优秀的程序员，完全可以将一个网页做成100k以内，甚至更小，大量利用颜色，小图标及标准化html，可以让网页变得非常漂亮又非常小，易于用户下载。只要不是以数据为主的网站，我觉得都可以把网站做得非常非常地小，不仅可以节省服务器带宽，还可以加快用户的访问速度，加快用户浏览器的解析速度，最令人心动的是，简短的HTML让搜索引擎非常喜欢，因为搜索引擎也不喜欢解析太于过复杂的HTML代码。</p>
<p>既然有这么多好处，我们的公司为什么无动于衷呢？究其原因无非有两个，第一不懂，决策人不懂技术，第二功利性太强，省钱，总希望快速得到结果，希望节省成本，所以完全忽略了前端工程师这个职位，其实这个职位可以给公司一年省上数万到数十万的带宽费用。</p>
<p>公司的CTO呢，在做什么？！许多公司都有这一职位，可以又真正做到一个合格的CTO了么，很多的CTO只不过是一个PM而已，以完全成项目为准绳，以客户（决策者）满意度为准绳。</p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/1324.html">http://iove.net/archives/1324.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/seo" rel="tag">seo</a>,<a href="http://iove.net/tag/%e7%a8%8b%e5%ba%8f%e5%91%98" rel="tag">程序员</a>,<a href="http://iove.net/tag/%e7%bd%91%e7%ab%99%e8%ae%bf%e9%97%ae%e9%80%9f%e5%ba%a6" rel="tag">网站访问速度</a>,<a href="http://iove.net/tag/%e7%bd%91%e9%a1%b5%e9%80%9f%e5%ba%a6" rel="tag">网页速度</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech" title="查看 IT技术 的全部文章" rel="category tag">IT技术</a>,<a href="http://iove.net/category/tech/seo-tech" title="查看 seo 的全部文章" rel="category tag">seo</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/1324.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>跟我学正则之——用正则校验身份证号码</title>
		<link>http://iove.net/archives/811.html</link>
		<comments>http://iove.net/archives/811.html#comments</comments>
		<pubDate>Sun, 29 Mar 2009 06:57:06 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[正则]]></category>
		<category><![CDATA[身份证]]></category>

		<guid isPermaLink="false">http://143</guid>
        <description><![CDATA[涂雅导读：　　一个阳光的周末，一个充实的周末，不知不觉从中午12点写代码写到晚上12点，除了中间吃饭之外，我一直坐在电脑旁边，时间过得很快，很久很久之前，我的周末与晚上也是这样度过的，又让我想起从前的日子。呵呵，闲话少说，来点实的。
要做身份证校验，首先我们要了解它的规则，否则就谈不上校验了，身份证分第一代和第二代，分别是15位及18位，规则如下：

             * 1.15位的身份证号码
             *  a.必需全部是数字
             *  b.第九十位是月份，只能是01至12
             *  c.第十、十一位是天，只能是01至31
             * 2.18位的身份号码
             *  1.除最后一位可以是X外，必需全部是数字
             *  2.第七至十位是年份，第9-10位只能是19或20，超过2099年的身份证做错误处理，估计我写的这个代码，到2099年也没啥用了
             *  3.第十、十一位是月份，同15位身份证
             *  4.第十二、十三位是天，同15位身份证<br />全文：
		<p>一个阳光的周末，一个充实的周末，不知不觉从中午12点写代码写到晚上12点，除了中间吃饭之外，我一直坐在电脑旁边，时间过得很快，很久很久之前，我的周末与晚上也是这样度过的，又让我想起从前的日子。呵呵，闲话少说，来点实的。</p>
<p>要做身份证校验，首先我们要了解它的规则，否则就谈不上校验了，身份证分第一代和第二代，分别是15位及18位，规则如下：</p>
<p>* 1.15位的身份证号码</p>
<p>*  a.必需全部是数字</p>
<p>*  b.第九十位是月份，只能是01至12</p>
<p>*  c.第十、十一位是天，只能是01至31</p>
<p>* 2.18位的身份号码</p>
<p>*  1.除最后一位可以是X外，必需全部是数字</p>
<p>*  2.第七至十位是年份，第9-10位只能是19或20，超过2099年的身份证做错误处理，估计我写的这个代码，到2099年也没啥用了</p>
<p>*  3.第十、十一位是月份，同15位身份证</p>
<p>*  4.第十二、十三位是天，同15位身份证</p>
<p>先来看15位的，前面8位是任意数字，用d{8}，d表示数字，d{8}表示必需匹配8个数字。</p>
<p>接下下是月份，月份为01至12需要分解，当月分的第一个数字是0的时候，第二个数可以匹配1-9，为什么0不匹配呢，因为不可能有00月。当月份的第一个数字是1时候，第二位数可以匹配0-2，也就是10、11、12三个月。这个正则是：((0[1-9])|(1[012]))，表示匹配第一个数字取0时候，第二数字取1-9；或者第一个数字取1的时候，第二个数字取0、1、2。这里的|是或的意思，括号表示一个匹配块，和做boolean运算的时候括号一样。</p>
<p>接下来要匹配天，天可以是01-31，也要分解成三种情况，当第一个数字是0的时候，第二个数字可以是1-9；当第一个数字是1和2的时候，第二个数字可以是0-9；当第一个数字是3的时候，第二个数字可以是0和1，那么我们可以出正则如下：0[1-9]|[12][0-9]|3[01]。</p>
<p>第十三至十五位，必需是数字，这个正则就很简单了，d{3}，匹配3个数字。</p>
<p>完整的正则如下：&#8221;^d{8}((0[1-9])|(1[012]))(0[1-9]|[12][0-9]|3[01])d{3}$&#8221;</p>
<p>再来看18位的身份证，前面6位是任意数字，就是d{6}了。第七至第十位，是年份的数字，这里我们只取19xx至20xx年，超过这个时间不考虑。正则如下：(19)|(20)d{2}。月份和天同15是一样的。最后一位可能是X，正则是：[0-9]|X$。18位身份证完整的正则：&#8221;^d{6}(19)|(20)d{2}((0[1-9])|(1[012]))(0[1-9]|[12][0-9]|3[01])d{3}[0-9]|X$&#8221;</p>
<p>心细的读者可能会发现，日期实际上存在着闰年情况，而且2月份不是31天，我们需要对日期进行校验。完整的代码如下</p>
<p><span id="more-811"></span></p>
<p>         ///<br />
         /// 判断是否为身份证<br />
         ///<br />
         ///</p>
<p>         ///<br />
         public static bool IsIdCard(string input)<br />
         {<br />
             /*<br />
              * 1.15位的身份证号码<br />
              *  a.必需全部是数字<br />
              *  b.第九十位是月份，只能是01至12<br />
              *  c.第十、十一位是日期，只能是01至31<br />
              * 2.18位的身份号码<br />
              *  1.除最后一位可以是X外，必需全部是数字<br />
              *  2.第七至十位是年份，第9-10位只能是19或20，超过2099年的身份证做错误处理，估计我写的这个代码，到2099年也没啥用了<br />
              *  3.第十、十一位是月份，同15位身份证<br />
              *  4.第十二、十三位是日期，同15位身份证<br />
              */<br />
             string pattern15 = @&#8221;^d{8}((0[1-9])|(1[012]))(0[1-9]|[12][0-9]|3[01])d{3}$&#8221;;<br />
             string pattern18 = @&#8221;^d{6}(19)|(20)d{2}((0[1-9])|(1[012]))(0[1-9]|[12][0-9]|3[01])d{3}[0-9]|X$&#8221;;<br />
             bool result = Regex.IsMatch(input, pattern15) || Regex.IsMatch(input, pattern18, RegexOptions.IgnoreCase);<br />
             if (result)<br />
             {<br />
                 //检查日期<br />
                 string dateStr = string.Empty;<br />
                 int step;<br />
                 if (input.Length == 15)<br />
                 {<br />
                     step = 0;<br />
                     dateStr = &#8220;19&#8243;;<br />
                 }<br />
                 else<br />
                 {<br />
                     step = 2;<br />
                 } </p>
<p>                 dateStr += input.Substring(6, 6 + step);<br />
                 DateTime date;<br />
                 return DateTime.TryParse(input, out date);<br />
             } </p>
<p>             return result;<br />
         }</p>
<p>因为我写代码的时候是写了几个函数的，这里作了一个整合，没有进行测试，有可能存在问题。</p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/811.html">http://iove.net/archives/811.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/%e6%ad%a3%e5%88%99" rel="tag">正则</a>,<a href="http://iove.net/tag/%e8%ba%ab%e4%bb%bd%e8%af%81" rel="tag">身份证</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/811.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="1" length="" type="" />
<enclosure url="1249048750" length="" type="" />
<enclosure url="跟我学正则之——用正则校验身份证号码" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="4185" length="" type="" />
<enclosure url="5" length="" type="" />
		</item>
		<item>
		<title>开源项目三层框架Squirrel Beta1</title>
		<link>http://iove.net/archives/810.html</link>
		<comments>http://iove.net/archives/810.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 00:52:38 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[Squirrel]]></category>
		<category><![CDATA[三层架构]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[松鼠]]></category>

		<guid isPermaLink="false">http://142</guid>
        <description><![CDATA[涂雅导读：　　介绍：Squirrel是一个三层架构的框架，它能做什么？
　　1.多数据库支持，通过配置文件，可以实时切换多种数据库，而不需要修改代码，目前已经支持Oracle数据库，SQLite数据库，Sql Server数据库。要实现对其它数据的支持也非常简单。
　　2.封装常用的数据库操作，绝大部分对单表的操作都已经被封装好，例如：Insert、Delete、Update、Select。
　　3.封装查询SQL语句，对于Where后面的条件语句进行封装，可以让代码中不出现SQL语句
　　4.支持JSON，而且可以选择产生JSON还是XML数据，对于AJAX特别有用
　　5.框架支持事务
　　6.其它扩展，如获取参数的扩展、字符串的扩展<br />全文：
		<div>这个框架一年前就写过了，一直没怎么动过，近来利用空余时间，把版本进行更新一下，没做太多的测试，希望兄弟们帮忙试试，说不定有点用处的，呵呵。顺便说一下，Squirrel是松鼠的意思，我曾经养了一只，后来死了，呵，纪念一下。<br />
介绍：Squirrel是一个三层架构的框架，它能做什么？<br />
1.多数据库支持，通过配置文件，可以实时切换多种数据库，而不需要修改代码，目前已经支持Oracle数据库，SQLite数据库，Sql Server数据库。要实现对其它数据的支持也非常简单。<br />
2.封装常用的数据库操作，绝大部分对单表的操作都已经被封装好，例如：Insert、Delete、Update、Select。<br />
3.封装查询SQL语句，对于Where后面的条件语句进行封装，可以让代码中不出现SQL语句<br />
4.支持JSON，而且可以选择产生JSON还是XML数据，对于AJAX特别有用<br />
5.框架支持事务<br />
6.其它扩展，如获取参数的扩展、字符串的扩展</div>
<p>Squirrel不能做什么？<br />
1.Squirrel是一个小框架，它的目的是提高小项目的开发速度，如果你想用它来支持上百万的吞吐量，无疑是不可能的<br />
2.复杂的数据库操作，我认为复杂的数据库操作应该写在存储过程中，Squirrel只实现对大量重复的，简单的操作进行封装，减小工作量。任何一个框架只能解决80%的问题，还有20%是需要自己去解决的<br />
3.并发量太高的项目，如果你的项目并发量很高，请不要使用Squirrel</p>
<p>未来Squirrel还有什么？<br />
1.增加对图片处理的扩展<br />
2.增加对上传文件的扩展<br />
3.增加对XSLT转换功能的扩展<br />
4.增加RSS2.0的支持<br />
5.增加对MetaWeblog API的支持</p>
<p>目前还没有用户手册，对于数据实体，是用我以前写的一个工作，叫CodeRobot自动生成的，我还没有写模版文件，Test项目中有一个Concrete_Article，数据实体的标准格式，有XSLT强的又有兴趣的兄弟，可以忙来写这个模版文件。Test项目中有一个Script.sql的文件，是测试用到的数据库表脚本。<br />
同时如果测试的话，还需要修改数据库连接。<br />
项目是用VS 2008及.Net Framework　3.5的环境下开发的，如果是VS 2005的环境，也不用担心，项目中并没有太多使用.Net Framework 3.5的地方，你可以自己尝试转换。<br />
欢迎大家使用并测试，我并没有进行太多的测试，出现Bug是非常正常的，非常欢迎高手指点，特别是对设计思路上的指点。</p>
<div><a href="http://images.iove.net/Download/CodeRobot1.6.rar" target="_blank">CodeRobot下载地址</a><br />
<a href="http://images.iove.net/Download/Squirrel_Beta.rar" target="_blank">Squirrel Beta下载地地</a>址<br />
开源项目网址：<a href="http://csf.codeplex.com">http://csf.codeplex.com </a></div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/810.html">http://iove.net/archives/810.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/framework" rel="tag">framework</a>,<a href="http://iove.net/tag/sql-server" rel="tag">sql server</a>,<a href="http://iove.net/tag/squirrel" rel="tag">Squirrel</a>,<a href="http://iove.net/tag/%e4%b8%89%e5%b1%82%e6%9e%b6%e6%9e%84" rel="tag">三层架构</a>,<a href="http://iove.net/tag/%e5%bc%80%e6%ba%90" rel="tag">开源</a>,<a href="http://iove.net/tag/%e6%9d%be%e9%bc%a0" rel="tag">松鼠</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/810.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="1249058528" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="3044" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="发布开源项目——基于.Net Framework三层框架Conis.Squirrel Beta1版" length="" type="" />
<enclosure url="9" length="" type="" />
		</item>
		<item>
		<title>实战设计模式之用组合模式实现JSON（一）</title>
		<link>http://iove.net/archives/801.html</link>
		<comments>http://iove.net/archives/801.html#comments</comments>
		<pubDate>Mon, 12 Jan 2009 01:01:29 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[组合模式]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://131</guid>
        <description><![CDATA[涂雅导读：         和所有程序员一样，我也一直在学习，学习更深层次的技术，学习软件开发的方法，学习软件项目管理。在学习设计模式的过程中，找了不少书，但我在学习这些书本的时候发现了一个很头疼的问题，这些书本都很生涩，非常之抽象，从模式的定义到模式的意图，再到模式的类图等等，非常多的笔墨来描述他们。可是，当讲到实际应用的时候，却是戛然而止，仿佛有若蜻蜓点水。
         我想大师们和我不一样，他们站在一个抽象的高度，所以他们只讲抽象、理论、要领、原则。然而，软件界要培养大师级的人物毕竟是小数，大多数人和我一样，是一个实践者，况且，每一个大师都是菜鸟进化而来的。千里之行，始于足下，九层高台，起于垒土。
         一直想把设计模式这个东西放在实际的案例中，然后写出来，这样我觉得更加平易近人，程序员都喜欢看代码。但实际上有很多制约未能成行，一方面是自身的水平问题，另一方面是一时间难以找到这么多合适的案例出来。
         刚好凑巧，最近需要用到JSON，设计模式中的组合模式正好可以应用，完成代码之后就想把自己的想法写出来，也希望多多少少能帮到正在学习设计模式的人，也算是这个系列的一个起点吧，我希望以后还有更多的时间与机会来写其它的设计模式。
         如果您正在看这篇文章，表示您正在学习，虽然本文附有代码，但我想您最好亲自去写一下这些代码。毕竟“纸上来得终觉浅，绝知此事要躬行”，多写多问多看总是有好处的。
         坦白讲，我的技术非常有限，在这篇文章中一定会存在着许多谬误，欢迎大家拍砖。
         我希望和更多的人一起交流，当然不仅仅是局限于技术，所以公开我的联系方式，但由于时间关系，我不一定能有问必答，希望能得到您的原谅。<br />全文：
		<h2>前言</h2>
<p>和所有程序员一样，我也一直在学习，学习更深层次的技术，学习软件开发的方法，学习软件项目管理。在学习设计模式的过程中，找了不少书，但我在学习这些书本的时候发现了一个很头疼的问题，这些书本都很生涩，非常之抽象，从模式的定义到模式的意图，再到模式的类图等等，非常多的笔墨来描述他们。可是，当讲到实际应用的时候，却是戛然而止，仿佛有若蜻蜓点水。我想大师们和我不一样，他们站在一个抽象的高度，所以他们只讲抽象、理论、要领、原则。然而，软件界要培养大师级的人物毕竟是小数，大多数人和我一样，是一个实践者，况且，每一个大师都是菜鸟进化而来的。千里之行，始于足下，九层高台，起于垒土。</p>
<p>一直想把设计模式这个东西放在实际的案例中，然后写出来，这样我觉得更加平易近人，程序员都喜欢看代码。但实际上有很多制约未能成行，一方面是自身的水平问题，另一方面是一时间难以找到这么多合适的案例出来。</p>
<p>刚好凑巧，最近需要用到JSON，设计模式中的组合模式正好可以应用，完成代码之后就想把自己的想法写出来，也希望多多少少能帮到正在学习设计模式的人，也算是这个系列的一个起点吧，我希望以后还有更多的时间与机会来写其它的设计模式。</p>
<p>如果您正在看这篇文章，表示您正在学习，虽然本文附有代码，但我想您最好亲自去写一下这些代码。毕竟“纸上来得终觉浅，绝知此事要躬行”，多写多问多看总是有好处的。</p>
<p>坦白讲，我的技术非常有限，在这篇文章中一定会存在着许多谬误，欢迎大家拍砖。</p>
<p>我希望和更多的人一起交流，当然不仅仅是局限于技术，所以公开我的联系方式，但由于时间关系，我不一定能有问必答，希望能得到您的原谅。</p>
<p>本案例的示例代码下载地址：<a href="http://images.iove.net/Lesson/DesignerPattern /DesignerPattern_JSON.zip">下载</a></p>
<p><strong>技术要求</strong></p>
<ol>
<li>设计模式的基本概念，对组合模式有一个基本的了解，如果不太明白，可以到网上去找相关的书籍，推荐一下《大话设计模式》这本书。</li>
<li>JSON(Javascript Object Notation，JSON其实非常简单，实际上就是一个数据字典，有点像C#中的Hashtable，网上有一个《深入浅出JSON》的PDF版，或者访问网址http://www.json.org</li>
<li>面向对象开发的基本思想，最好是有C#或者Java的开发经验。</li>
</ol>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/801.html">http://iove.net/archives/801.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/javascript" rel="tag">Javascript</a>,<a href="http://iove.net/tag/json" rel="tag">json</a>,<a href="http://iove.net/tag/%e7%bb%84%e5%90%88%e6%a8%a1%e5%bc%8f" rel="tag">组合模式</a>,<a href="http://iove.net/tag/%e8%ae%be%e8%ae%a1%e6%a8%a1%e5%bc%8f" rel="tag">设计模式</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/801.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
<enclosure url="497" length="" type="" />
<enclosure url="17" length="" type="" />
<enclosure url="1249146370" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="实战设计模式之用组合模式实现JSON（一）" length="" type="" />
		</item>
		<item>
		<title>七宗罪——.Net开发中不可饶恕的失误</title>
		<link>http://iove.net/archives/779.html</link>
		<comments>http://iove.net/archives/779.html#comments</comments>
		<pubDate>Thu, 17 Jan 2008 23:41:38 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[IT技术]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[优化]]></category>

		<guid isPermaLink="false">http://100</guid>
        <description><![CDATA[涂雅导读：一、过多嵌套用户控件
二、使用太多的视图状态
三、一切都由服务器响应
四、完全依赖于服务器控件
五、过多地使用Session
六、不考虑最终生成的HTML代码
七、乱用新技术
<br />全文：
		<div><strong>一、过多嵌套用户控件</strong><br />　　.Net为了避免命名的重复，客户端ID的命名都是将祖祖孙辈辈的名称加起来，作为当前控件的名字，而且在.Net中，客户端HTML元素基本都有ID,CSS属性。这样一来，客户端输出的代码，仅是名称就会占到代码量的1/4左右。正确的做法是少用用户控件，将控件名缩短。</div>
<div><strong>二、使用太多的视图状态</strong><br />　　.Net的视图状态是很爽，但你知道视图状态是怎么工作的么？它是把数据经过编码后，输出到客户端的隐藏域中。以前就见到一哥们，输出的代码居然有2M，天啦，NotePad都打不开。正确的做法是尽量少用视图状态，以前.Net没出来的时候，大家就不做网页了么？有那么多数据需要保存么？</div>
<div><strong>三、一切都由服务器响应</strong><br />　　我不知道是该骂MS白痴还是应骂某些程序员白痴，一个返回事件都要由服务器去响应，考验服务器的水平么？现在都要向富客户端或者智能客户端发展了，还把什么东西都交给服务器干什么？如果让去开发一个并发访问上千次的网站，你就知道少一个服务器响应对于服务器来讲是多么重要了。正确的做法是能在客户端响应，尽量由客户端响应，谁喜欢有事没事地刷屏啊，刷得眼都花了</div>
<div><strong>四、完全依赖于服务器控件</strong><br />　　某些程序员不管是做什么，总喜欢拉一个服务器控件到网页中，哪怕是简单的文字，也要接一个Label。可是这样你知不知道.Net所有的服务器控件都需要.Net FrameWork经手一遍呢？拜托，别考验服务器了，让他歇会儿吧</div>
<div><strong>五、过多地使用Session</strong><br />　　不管是.Net，还是Java，还是ASP等等，一律少用Session，这个东西太浪费资源了，而且在IIS下还容易丢失，放弃吧。</div>
<div><strong>六、不考虑最终生成的HTML代码</strong><br />　　.Net确实非常强大，但还没有强大到不使用HTML代码，.Net最终生成的代码麻烦你在开发的时候看一看，你就会慎重选择服务器控件、视图状态这些玩意儿了。别发生2M的HTML代码这样的笑话了。</div>
<div><strong>七、乱用新技术</strong><br />　　网页是做给别人用的，别一会儿反射，一会设计模式，一会儿泛型的，把合适的技术用在合适的地方，才是最好的技术</div>
<div>　　最后，希望所有的.Net程序员，只要你在做Web开发，多去学学HTML，CSS，Javascript，这些是做网页的基础。</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/779.html">http://iove.net/archives/779.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/net" rel="tag">.net</a>,<a href="http://iove.net/tag/%e4%bc%98%e5%8c%96" rel="tag">优化</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech" title="查看 IT技术 的全部文章" rel="category tag">IT技术</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/779.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="469" length="" type="" />
<enclosure url="9" length="" type="" />
		</item>
		<item>
		<title>屏蔽TreeView服务器端事件，添加有效的客户端事件</title>
		<link>http://iove.net/archives/777.html</link>
		<comments>http://iove.net/archives/777.html#comments</comments>
		<pubDate>Wed, 16 Jan 2008 01:02:39 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Javascript&jQuery]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[treeview]]></category>

		<guid isPermaLink="false">http://98</guid>
        <description><![CDATA[涂雅导读：　　最近项目需要使用TreeView，客户说点击一下刷屏很不爽，查了查TreeView，发现MS居然不提供客户端响应事件的功能，也就说一定要使用服务器端响应事件，这个白痴的MS，很多时候TreeView是不需要服务器响应的，居然把什么都做到服务器中去，想考验服务器的水平啊。
　　先是到网上找了一大堆资料，结果发现都不能解决问题，过程就不说了，结果才是别人的，过程就留给自己吧。最后还是自己想办法，基本的思路是从客户端相办法。在客户端用javascript把树的节点链接中的onclick及href给替换掉，有了这个思路就好解决了。
……

　　这里的ClickNode就是客户端的JS代码了，你可以以任何的代码替代。实际上原理很简单：

　　通过TreeView的客户端ID，获取该容器下的所有链接 
　　循环屏蔽节点的链接A的事件(onclick)及href 
　　在链接的文本（最终输出<a></a>中间的内容）加入<span onclick=Event>Text</span>
<br />全文：
		<p>最近项目需要使用TreeView，客户说点击一下刷屏很不爽，查了查TreeView，发现MS居然不提供客户端响应事件的功能，也就说一定要使用服务器端响应事件，这个白痴的MS，很多时候TreeView是不需要服务器响应的，居然把什么都做到服务器中去，想考验服务器的水平啊。<br />
先是到网上找了一大堆资料，结果发现都不能解决问题，过程就不说了，结果才是别人的，过程就留给自己吧。最后还是自己想办法，基本的思路是从客户端相办法。在客户端用javascript把树的节点链接中的onclick及href给替换掉，有了这个思路就好解决了。看代码：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">     <span style="color: #003366; font-weight: bold;">var</span> treeView <span style="color: #339933;">=</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&amp;lt;% = this.treeClass.ClientID %&amp;gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>　　<span style="color: #006600; font-style: italic;">//获取容器对象</span>
     <span style="color: #003366; font-weight: bold;">var</span> items <span style="color: #339933;">=</span> treeView.<span style="color: #660066;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;A&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #006600; font-style: italic;">//获取所有A的tag（也就是链接了)</span>
   <span style="color: #006600; font-style: italic;">//循环替换</span>
     <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&amp;</span>lt<span style="color: #339933;">;</span> items.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
     <span style="color: #009900;">&#123;</span>
         <span style="color: #003366; font-weight: bold;">var</span> eventStr <span style="color: #339933;">=</span> items<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">href</span><span style="color: #339933;">;</span>
        <span style="color: #006600; font-style: italic;">//要判断链接中是否包含TreeView_ToggleNode，因为TreeView_ToggleNode这个函数是负责折叠的，所以不能置空</span>
         <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>eventStr.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;TreeView_ToggleNode&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span>
         <span style="color: #009900;">&#123;</span>
             items<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">onclick</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>   <span style="color: #006600; font-style: italic;">//将链接的onclick事件置空</span>
             items<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">href</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;###&quot;</span><span style="color: #339933;">;</span>
         <span style="color: #009900;">&#125;</span>
     <span style="color: #009900;">&#125;</span></pre></div></div>

<p>然后我们在创建树的时候：</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> TreeNode  node <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> TreeNode<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 node.<span style="color: #660066;">Value</span> <span style="color: #339933;">=</span> value<span style="color: #339933;">;</span>
 node.<span style="color: #660066;">Text</span> <span style="color: #339933;">=</span> string.<span style="color: #660066;">Format</span><span style="color: #009900;">&#40;</span>
 <span style="color: #3366CC;">&quot;&lt;span onclick=&quot;</span><span style="color: #000066; font-weight: bold;">return</span> ClickNode<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'{0}'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'{1}'</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #3366CC;">&quot;&gt;{0}&lt;/span&gt;&quot;</span><span style="color: #339933;">,</span> 
 text<span style="color: #339933;">,</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>这里的ClickNode就是客户端的JS代码了，你可以以任何的代码替代。实际上原理很简单：</p>
<ol>
<li>通过TreeView的客户端ID，获取该容器下的所有链接</li>
<li>循环屏蔽节点的链接A的事件(onclick)及href</li>
<li>在链接的文本（最终输出&lt;a&gt;&lt;/a&gt;中间的内容）加入&lt;span onclick=Event&gt;Text&lt;/span&gt;</li>
</ol>
<p><span style="color: #ff0000; font-size: medium;">说明：今天发现了一个方法，就是把node的SelectAction设置为TreeNodeSelectAction.Expand或者TreeNodeSelectAction.None可以解决这个问题，我为我自己的无知向读者道歉，并为自己未了解TreeView的功能而向微软抱怨及大放厥词感到羞愧。我决定不删除这篇文章，以警示我在以后的道路上谨慎求知。</span></p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/777.html">http://iove.net/archives/777.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/javascript" rel="tag">Javascript</a>,<a href="http://iove.net/tag/treeview" rel="tag">treeview</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech/javascript-jquery" title="查看 Javascript&amp;jQuery 的全部文章" rel="category tag">Javascript&amp;jQuery</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/777.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="1249023253" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="屏蔽TreeView服务器端事件，添加有效的客户端事件" length="" type="" />
<enclosure url="4848" length="" type="" />
<enclosure url="7" length="" type="" />
		</item>
		<item>
		<title>链表与队列的公共操作</title>
		<link>http://iove.net/archives/761.html</link>
		<comments>http://iove.net/archives/761.html#comments</comments>
		<pubDate>Mon, 10 Sep 2007 02:44:21 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[queue]]></category>
		<category><![CDATA[链表]]></category>
		<category><![CDATA[队列]]></category>

		<guid isPermaLink="false">http://80</guid>
        <description><![CDATA[涂雅导读：<div>　　周未在家没事，封装了一个链表与队列操作的类，主要目的是实现对链表基本操作的封装。本人才疏学浅，如果有写得不好的地方，还望大家指正。类及方法属性如下图：</div>
<div align="center"><img alt="" src="/UPLOAD/Lesson/CSharp/LinkedList/001.gif" /></div>
<div>&#160;</div>
<div>　　　　LinkedList类，链表操作的类，包括插入、删除、移动、获取节点数据等操作；ListNode类，封装在ListedList中的私用类，目的是不让外部访问，因为外部只需要操作数据即可；Queue类，队列操作，只有入队与出队两个方法，先进先出原则；NodeData类，这个类很重要，虽然只有有一个Dispose方法，这个类是一个抽象类，只允许继承。目的是扩展链表的数据功能而无需对链表的基本功能进行修改，面向对象一个很重要的思想就是增加功能不需要修改原来的代码。在本例中，我们就可以通过继承NodeData来扩展NodeData类。</div><br />全文：
		<div>周未在家没事，封装了一个链表与队列操作的类，主要目的是实现对链表基本操作的封装。本人才疏学浅，如果有写得不好的地方，还望大家指正。类及方法属性如下图：</div>
<div><img src="http://images.iove.net/Lesson/CSharp/LinkedList/001.gif" alt="" width="480" height="373" /></div>
<div>LinkedList类，链表操作的类，包括插入、删除、移动、获取节点数据等操作；ListNode类，封装在ListedList中的私用类，目的是不让外部访问，因为外部只需要操作数据即可；Queue类，队列操作，只有入队与出队两个方法，先进先出原则；NodeData类，这个类很重要，虽然只有有一个Dispose方法，这个类是一个抽象类，只允许继承。目的是扩展链表的数据功能而无需对链表的基本功能进行修改，面向对象一个很重要的思想就是增加功能不需要修改原来的代码。在本例中，我们就可以通过继承NodeData来扩展NodeData类。</p>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"> <span style="color: #0600FF;">using</span> <span style="color: #008080;">System</span><span style="color: #008000;">;</span>   
&nbsp;
 <span style="color: #0600FF;">namespace</span> Conis.<span style="color: #0000FF;">Squirrel</span>.<span style="color: #0000FF;">FrameWork</span>
 <span style="color: #000000;">&#123;</span>
     <span style="color: #008080;">#region 节点数据的基类</span>
     <span style="color: #0600FF;">public</span> abstract <span style="color: #FF0000;">class</span> NodeData
     <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Dispose<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             GC.<span style="color: #0000FF;">SuppressFinalize</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>
     <span style="color: #008080;">#endregion  </span>
&nbsp;
     <span style="color: #008080;">#region 链表的基本操作</span>
     <span style="color: #008080; font-style: italic;">///</span>
     <span style="color: #008080; font-style: italic;">/// LinkedList 的摘要说明</span>
     <span style="color: #008080; font-style: italic;">///</span>
     <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> LinkedList
     <span style="color: #000000;">&#123;</span>
         <span style="color: #008080;">#region 链表节点基类</span>
         <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">class</span> ListNode
         <span style="color: #000000;">&#123;</span>
             <span style="color: #0600FF;">public</span> ListNode Previous<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">public</span> ListNode Next<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">public</span> NodeData Data<span style="color: #008000;">;</span>   
&nbsp;
             <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Dispose<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 GC.<span style="color: #0000FF;">SuppressFinalize</span><span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>
         <span style="color: #008080;">#endregion  </span>
&nbsp;
         <span style="color: #008080;">#region 属性</span>
         <span style="color: #0600FF;">private</span> ListNode _Current<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">private</span> <span style="color: #FF0000;">int</span> _Count<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">private</span> ListNode _First<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">private</span> ListNode _Last<span style="color: #008000;">;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 第一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> NodeData First
         <span style="color: #000000;">&#123;</span>
             get
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> _First.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 获取最后一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> NodeData Last
         <span style="color: #000000;">&#123;</span>
             get
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> _Last.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 节点总数</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Count
         <span style="color: #000000;">&#123;</span>
             get
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> _Count<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 获取当前节点的数据</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> NodeData Current
         <span style="color: #000000;">&#123;</span>
             get
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>
         <span style="color: #008080;">#endregion   </span>
&nbsp;
         <span style="color: #0600FF;">public</span> LinkedList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             _First <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             _Last <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             _Current <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             _Count <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 检查是否有第一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">bool</span> Bof<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #0600FF;">return</span> _Current <span style="color: #008000;">==</span> _First<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 检查是否有最后一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">bool</span> Eof<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #0600FF;">return</span> _Current <span style="color: #008000;">==</span> _Last<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 添加一个新节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
<span style="color: #008000;">&lt;</span>span<span style="color: #008000;">&gt;</span> <span style="color: #008000;">&lt;/</span>span<span style="color: #008000;">&gt;</span>节点数据
         <span style="color: #008080; font-style: italic;">/// 返回新加入节点的索引</span>
         <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Append<span style="color: #000000;">&#40;</span>NodeData data<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             ListNode node <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ListNode<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             node.<span style="color: #0000FF;">Data</span> <span style="color: #008000;">=</span> data<span style="color: #008000;">;</span>
             node.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             <span style="color: #008080; font-style: italic;">//空链表</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_Count <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 node.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
                 _First <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span>
             <span style="color: #000000;">&#123;</span>
                 node.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> _Last<span style="color: #008000;">;</span>
                 _Last.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             _Last <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
             <span style="color: #008080; font-style: italic;">//_Current = node;</span>
             _Count<span style="color: #008000;">++;</span>
             <span style="color: #0600FF;">return</span> _Count<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 在指定位置插入节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
<span style="color: #008000;">&lt;</span>span<span style="color: #008000;">&gt;</span> <span style="color: #008000;">&lt;/</span>span<span style="color: #008000;">&gt;</span>节点数据
         <span style="color: #008080; font-style: italic;">///</span>
<span style="color: #008000;">&lt;</span>span<span style="color: #008000;">&gt;</span> <span style="color: #008000;">&lt;/</span>span<span style="color: #008000;">&gt;</span>要插入的位置
         <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Insert<span style="color: #000000;">&#40;</span>NodeData data, <span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//超出范围</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> index <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> _Count<span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Index out range&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #008080; font-style: italic;">//索引在最后位置，实际就是附�</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> _Count<span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>data<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                 return<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #008080; font-style: italic;">//插入到第一个位置或者中间的位置</span>
             ListNode node <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> ListNode<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             node.<span style="color: #0000FF;">Data</span> <span style="color: #008000;">=</span> data<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #008080; font-style: italic;">//插到第一个位置</span>
                 node.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> _First<span style="color: #008000;">;</span>
                 node.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
                 _First.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
                 _First <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span>
             <span style="color: #000000;">&#123;</span>
                 ListNode cur <span style="color: #008000;">=</span> _Current<span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Move</span><span style="color: #000000;">&#40;</span>index<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                 node.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> _Current.<span style="color: #0000FF;">Previous</span><span style="color: #008000;">;</span>
                 _Current.<span style="color: #0000FF;">Previous</span>.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
                 node.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> _Current<span style="color: #008000;">;</span>
                 _Current.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> node<span style="color: #008000;">;</span>
                 _Current <span style="color: #008000;">=</span> cur<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             _Count<span style="color: #008000;">++;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 删除指定位置的节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
要删除的位置
         <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Delete<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//超出范围</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> index <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;</span> _Count<span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">throw</span> <span style="color: #008000;">new</span> Exception<span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;Index out range&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>                                 <span style="color: #008080; font-style: italic;">//删除第一个链表节点</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Bof</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>                             <span style="color: #008080; font-style: italic;">//如果当前节点是第一个节点则设置Currrent设置为null</span>
                 <span style="color: #000000;">&#123;</span>
                     _Current <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
                 <span style="color: #000000;">&#125;</span>
                 _First <span style="color: #008000;">=</span> _First.<span style="color: #0000FF;">Next</span><span style="color: #008000;">;</span>
                 _First.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span> <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> _Count <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>                  <span style="color: #008080; font-style: italic;">//当前是链表尾</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Eof</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>                             <span style="color: #008080; font-style: italic;">//如果当前节点是最后一个节点则设置Currrent设置为null</span>
                 <span style="color: #000000;">&#123;</span>
                     _Current <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
                 <span style="color: #000000;">&#125;</span>
                 _Last <span style="color: #008000;">=</span> _Last.<span style="color: #0000FF;">Previous</span><span style="color: #008000;">;</span>
                 _Last.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span>
             <span style="color: #000000;">&#123;</span>
                 ListNode cur <span style="color: #008000;">=</span> _Current<span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Move</span><span style="color: #000000;">&#40;</span>index<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                 _Current.<span style="color: #0000FF;">Previous</span>.<span style="color: #0000FF;">Next</span> <span style="color: #008000;">=</span> _Current.<span style="color: #0000FF;">Next</span><span style="color: #008000;">;</span>
                 _Current.<span style="color: #0000FF;">Next</span>.<span style="color: #0000FF;">Previous</span> <span style="color: #008000;">=</span> _Current.<span style="color: #0000FF;">Previous</span><span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>cur <span style="color: #008000;">==</span> _Current<span style="color: #000000;">&#41;</span>                            <span style="color: #008080; font-style: italic;">//当前节点点就是要删除的节点</span>
                 <span style="color: #000000;">&#123;</span>
                     _Current <span style="color: #008000;">=</span> null<span style="color: #008000;">;</span>
                 <span style="color: #000000;">&#125;</span>
                 <span style="color: #0600FF;">else</span>
                 <span style="color: #000000;">&#123;</span>
                     _Current <span style="color: #008000;">=</span> cur<span style="color: #008000;">;</span>
                 <span style="color: #000000;">&#125;</span>
             <span style="color: #000000;">&#125;</span>
             _Count<span style="color: #008000;">--;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 移至下一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 返回新移动的节点数据</span>
         <span style="color: #0600FF;">public</span> NodeData MoveNext<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//当前已经是最后一个节点</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Eof</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span>
             <span style="color: #000000;">&#123;</span>
                 _Current <span style="color: #008000;">=</span> _Current.<span style="color: #0000FF;">Next</span><span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 移至上一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 返回新移动的节点数据</span>
         <span style="color: #0600FF;">public</span> NodeData MovePrevious<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//当前已经是最前节眯</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span><span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Bof</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">else</span>
             <span style="color: #000000;">&#123;</span>
                 _Current <span style="color: #008000;">=</span> _Current.<span style="color: #0000FF;">Previous</span><span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 移动到第一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 返回新移动的节点数据</span>
         <span style="color: #0600FF;">public</span> NodeData MoveFirst<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             _Current <span style="color: #008000;">=</span> _First<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">return</span> _Current <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">:</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 移动第最后一个节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> NodeData MoveLast<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             _Current <span style="color: #008000;">=</span> _Last<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">return</span> _Current <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">:</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 移动到指定位置</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
移动位置
         <span style="color: #008080; font-style: italic;">/// 返回新移动的节点数据</span>
         <span style="color: #0600FF;">public</span> NodeData Move<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//索引超出范围，返回null</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">||</span> index <span style="color: #008000;">&amp;</span>gt<span style="color: #008000;">;=</span> _Count<span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #008080; font-style: italic;">//移动到第一个节点</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">MoveFirst</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #008080; font-style: italic;">//移动到最后一个节点</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>index <span style="color: #008000;">==</span> _Count <span style="color: #008000;">-</span> <span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">MoveLast</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">MoveFirst</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #008080; font-style: italic;">///移动到中间的节点</span>
             <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> iLoop <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> iLoop <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> _Count<span style="color: #008000;">;</span> iLoop<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 ListNode a <span style="color: #008000;">=</span> _Current<span style="color: #008000;">;</span>
                 <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>iLoop <span style="color: #008000;">==</span> index<span style="color: #000000;">&#41;</span>
                 <span style="color: #000000;">&#123;</span>
                     <span style="color: #008080; font-style: italic;">//_Current = _Current.Next;</span>
                     <span style="color: #0600FF;">return</span> _Current.<span style="color: #0000FF;">Data</span><span style="color: #008000;">;</span>
                 <span style="color: #000000;">&#125;</span>
                 <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">MoveNext</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>        <span style="color: #008080; font-style: italic;">//向下移动</span>
             <span style="color: #000000;">&#125;</span>
             <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 获取指定位置的节点</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
要获取的位置
         <span style="color: #008080; font-style: italic;">/// 返回获取的节点数据，如果没有这个位置，由返回null</span>
         <span style="color: #0600FF;">public</span> NodeData GetNodeData<span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> index<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             ListNode cur <span style="color: #008000;">=</span> _Current<span style="color: #008000;">;</span>
             NodeData result <span style="color: #008000;">=</span> <span style="color: #0600FF;">this</span>.<span style="color: #0000FF;">Move</span><span style="color: #000000;">&#40;</span>index<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             _Current <span style="color: #008000;">=</span> cur<span style="color: #008000;">;</span>
             <span style="color: #0600FF;">return</span> result<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
     <span style="color: #000000;">&#125;</span>
     <span style="color: #008080;">#endregion   </span>
&nbsp;
     <span style="color: #008080; font-style: italic;">///</span>
     <span style="color: #008080; font-style: italic;">/// 队列操作，先进先出原则</span>
     <span style="color: #008080; font-style: italic;">///</span>
     <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">class</span> Queue
     <span style="color: #000000;">&#123;</span>
         <span style="color: #0600FF;">private</span> LinkedList _List<span style="color: #008000;">;</span>
         <span style="color: #0600FF;">private</span> Queue<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> <span style="color: #000000;">&#123;</span> <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #0600FF;">public</span> <span style="color: #FF0000;">int</span> Count
         <span style="color: #000000;">&#123;</span>
             get
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> _List <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">?</span> <span style="color: #FF0000;">0</span> <span style="color: #008000;">:</span> _List.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 入队</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
&nbsp;
         <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">void</span> Push<span style="color: #000000;">&#40;</span>NodeData data<span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_List <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 _List <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> LinkedList<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
             _List.<span style="color: #0000FF;">Append</span><span style="color: #000000;">&#40;</span>data<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">/// 出队</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #008080; font-style: italic;">///</span>
         <span style="color: #0600FF;">public</span> NodeData Pop<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">//空链表，返回null</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>_List <span style="color: #008000;">==</span> <span style="color: #0600FF;">null</span> <span style="color: #008000;">||</span> _List.<span style="color: #0000FF;">Count</span> <span style="color: #008000;">==</span> <span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #0600FF;">return</span> null<span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>   
&nbsp;
             NodeData data <span style="color: #008000;">=</span> _List.<span style="color: #0000FF;">First</span><span style="color: #008000;">;</span>
             _List.<span style="color: #0000FF;">Delete</span><span style="color: #000000;">&#40;</span><span style="color: #FF0000;">0</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #0600FF;">return</span> data<span style="color: #008000;">;</span>
         <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>
 <span style="color: #000000;">&#125;</span></pre></div></div>

<p><a href="http://images.iove.net/Lesson/CSharp/LinkedList/LinkedList.rar" target="_blank"></a>[download id="4"]</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/761.html">http://iove.net/archives/761.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/queue" rel="tag">queue</a>,<a href="http://iove.net/tag/%e9%93%be%e8%a1%a8" rel="tag">链表</a>,<a href="http://iove.net/tag/%e9%98%9f%e5%88%97" rel="tag">队列</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/761.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="1249145507" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="链表与队列的公共操作" length="" type="" />
<enclosure url="4298" length="" type="" />
<enclosure url="9" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
<enclosure url="0" length="" type="" />
		</item>
		<item>
		<title>C#小技巧，持续更新中&#8230;.</title>
		<link>http://iove.net/archives/760.html</link>
		<comments>http://iove.net/archives/760.html#comments</comments>
		<pubDate>Sat, 08 Sep 2007 19:36:58 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[技巧]]></category>

		<guid isPermaLink="false">http://79</guid>
        <description><![CDATA[涂雅导读：　　在这里技术C#、.Net开发的一些小技巧，持续更新...中<br />全文：
		<div>1、Q：我从其它地方复制代码到.Net的IDE中，没有缩进的格式，怎么处理？ 11:41 2007-09-08<br />　　A：先将代码复制到IDE中，再从IDE复制，再粘贴到IDE中，缩进格式就出来。</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/760.html">http://iove.net/archives/760.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/%e6%8a%80%e5%b7%a7" rel="tag">技巧</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/760.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="1249023492" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="1742" length="" type="" />
<enclosure url="4" length="" type="" />
		</item>
		<item>
		<title>2005使用UrlWritter做真正的二级域名</title>
		<link>http://iove.net/archives/746.html</link>
		<comments>http://iove.net/archives/746.html#comments</comments>
		<pubDate>Mon, 06 Aug 2007 04:17:37 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[urlrewriter]]></category>
		<category><![CDATA[二级域名]]></category>
		<category><![CDATA[正则]]></category>

		<guid isPermaLink="false">http://65</guid>
        <description><![CDATA[涂雅导读： 　　到微软件的网站下了一个UrlWriter的安装包，简单地说一下，微软下载的是基于2003的，如果你用的是2005，可能会进行一些转换，这个转换过程是安全的，但转换完成了后并不能工作，我到网上找了找，发现网上有相关的解决的方案，但根据网友提供的解决方案始终不能解决问题，汗一个，难道我下错版本了？
　　根据网上提供的线索，可以基本确定不能使用二级域名的原因是因为UrlWriter在取地址的时候，只取文件地址而没有取全部的URL，知道原因就好办了，自己进行调试，还得靠自己啊。<br />全文：
		<div><span style="color: #808080;"> <span style="text-decoration: underline;">备注：在读本文的时候，你需要具备一些.net的基础知识与泛域名相关的知识，如果不具备这些知识，建议你先到网上搜索相关知识。</span></span></div>
<div>前段时间公司的一个项目要用到二级域名，需求方对原来的泛域名解析不太满意，原来的域名有两种方案，一种是二级域名只做指向作用，到访问子站点的时候就在地址栏带参数，比如访问张三子站的新闻列表地址就会变成：<a href="http://iove.net/news.aspx?domain=zs">http://iove.net/news.aspx?domain=zs</a>；另一种是生成静态页，为每个子站在主目录下生成一个文件夹，将静态页生成在这个目录中，动态数据采用Ajax从服务器获取，比如访问张三子站的新闻列表地址就可以这样访问：<a href="http://zs.iove.net/users/zs/news.html">http://zs.iove.net/users/zs/news.html</a>，我来简单说明一下两种方案的优劣。</div>
<table style="width: 487px; height: 176px;" border="0" cellspacing="0" cellpadding="0" width="487" align="center">
<tbody>
<tr>
<td width="139"></td>
<td width="188">第一种方案</td>
<td width="126">第二种方案</td>
</tr>
<tr>
<td><strong>频道写入IO</strong></td>
<td>否</td>
<td>是</td>
</tr>
<tr>
<td><strong>文件的管理</strong></td>
<td>否</td>
<td>是</td>
</tr>
<tr>
<td><strong>搜索引擎的友好性</strong></td>
<td>不友好</td>
<td>非常友好</td>
</tr>
<tr>
<td><strong>速度</strong></td>
<td>快</td>
<td>较快</td>
</tr>
<tr>
<td><strong>地址的友好性</strong></td>
<td>非常不友好</td>
<td>比较友好</td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div>第二种方案只所以对搜索引擎非常友好是因为采用了静态页，但地址栏的问题并未彻底解决，因为<a href="http://zs.iove.net/users/zs/news.html">http://<span style="color: #ff0000;">zs</span>.iove.net/users/zs/news.html</a>使用<a href="http://ls.iove.net/users/zs/news.html">http://<span style="color: #ff0000;">ls</span>.iove.net/users/zs/news.html</a>也能访问，这样的话用户会很迷惑，需求方对这样的解决方案也不是很满意，于是决定寻求其它的解决方案。</div>
<div>到网上查了相关的资料，发现在.Net中，可以使用UrlWriter来解决二级域名的问题。原理很简单，IIS会根据请求的扩展名将请求转交给注册的程序或类库，工作原理如图：</div>
<div><img src="http://images.iove.net/200708052018348518.gif" alt="" /></div>
<div>(图1)</div>
<div>到微软件的网站下了一个UrlWriter的安装包，简单地说一下，微软下载的是基于2003的，如果你用的是2005，可能会进行一些转换，这个转换过程是安全的，但转换完成了后并不能工作，我到网上找了找，发现网上有相关的解决的方案，但根据网友提供的解决方案始终不能解决问题，汗一个，难道我下错版本了？</div>
<div>根据网上提供的线索，可以基本确定不能使用二级域名的原因是因为UrlWriter在取地址的时候，只取文件地址而没有取全部的URL，知道原因就好办了，自己进行调试，还得靠自己啊。</div>
<div>经过调试，发现主要了在RewriterFactoryHandler.cs文件上，修改其中的GetHandler方法，主要的修改可以参看代码，我在代码中有详细的说明，具体代码如下：</div>

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"> <span style="color: #0600FF;">public</span> <span style="color: #0600FF;">virtual</span> IHttpHandler GetHandler<span style="color: #000000;">&#40;</span>HttpContext context, <span style="color: #FF0000;">string</span> requestType, <span style="color: #FF0000;">string</span> url, <span style="color: #FF0000;">string</span> pathTranslated<span style="color: #000000;">&#41;</span>
 <span style="color: #000000;">&#123;</span>
     <span style="color: #008080; font-style: italic;">// log info to the Trace object...</span>
     context.<span style="color: #0000FF;">Trace</span>.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;RewriterFactoryHandler&quot;</span>, <span style="color: #666666;">&quot;Entering RewriterFactoryHandler&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
     <span style="color: #FF0000;">string</span> sendToUrl <span style="color: #008000;">=</span> url<span style="color: #008000;">;</span>
     <span style="color: #FF0000;">string</span> filePath <span style="color: #008000;">=</span> pathTranslated<span style="color: #008000;">;</span>   
&nbsp;
     <span style="color: #008080; font-style: italic;">//获取完整的url</span>
     <span style="color: #FF0000;">string</span> requestURL <span style="color: #008000;">=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">IsAuthenticated</span> <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;https://&quot;</span> <span style="color: #008000;">:</span> <span style="color: #666666;">&quot;http://&quot;</span><span style="color: #008000;">;</span>      <span style="color: #008080; font-style: italic;">//判断协议类型</span>
     requestURL <span style="color: #008000;">+=</span> <span style="color: #FF0000;">80</span> <span style="color: #008000;">==</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">Url</span>.<span style="color: #0000FF;">Port</span> <span style="color: #008000;">?</span> <span style="color: #666666;">&quot;&quot;</span> <span style="color: #008000;">:</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">Url</span>.<span style="color: #0000FF;">Port</span>.<span style="color: #0000FF;">ToString</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>              <span style="color: #008080; font-style: italic;">//是否要加上端口</span>
     requestURL <span style="color: #008000;">+=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">ServerVariables</span><span style="color: #000000;">&#91;</span><span style="color: #666666;">&quot;SERVER_NAME&quot;</span><span style="color: #000000;">&#93;</span><span style="color: #008000;">;</span>
     requestURL <span style="color: #008000;">+=</span> context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">Path</span><span style="color: #008000;">;</span>   
&nbsp;
     <span style="color: #008080; font-style: italic;">//如果是www或者localhost就忽略，当然也可以将忽略列表中入web.config文件中，弹性更大</span>
     <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>requestURL.<span style="color: #0000FF;">ToLower</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">IndexOf</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;www.&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span> <span style="color: #008000;">&amp;</span>amp<span style="color: #008000;">;&amp;</span>amp<span style="color: #008000;">;</span> requestURL.<span style="color: #0000FF;">ToLower</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">IndexOf</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;localhost&quot;</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">==</span> <span style="color: #008000;">-</span><span style="color: #FF0000;">1</span><span style="color: #000000;">&#41;</span>
     <span style="color: #000000;">&#123;</span>
         <span style="color: #008080; font-style: italic;">// get the configuration rules</span>
         RewriterRuleCollection rules <span style="color: #008000;">=</span> RewriterConfiguration.<span style="color: #0000FF;">GetConfig</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>.<span style="color: #0000FF;">Rules</span><span style="color: #008000;">;</span>   
&nbsp;
         <span style="color: #008080; font-style: italic;">// iterate through the rules</span>
         <span style="color: #0600FF;">for</span> <span style="color: #000000;">&#40;</span><span style="color: #FF0000;">int</span> i <span style="color: #008000;">=</span> <span style="color: #FF0000;">0</span><span style="color: #008000;">;</span> i <span style="color: #008000;">&amp;</span>lt<span style="color: #008000;">;</span> rules.<span style="color: #0000FF;">Count</span><span style="color: #008000;">;</span> i<span style="color: #008000;">++</span><span style="color: #000000;">&#41;</span>
         <span style="color: #000000;">&#123;</span>
             <span style="color: #008080; font-style: italic;">// Get the pattern to look for (and resolve its URL)</span>
             <span style="color: #FF0000;">string</span> lookFor <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;^&quot;</span> <span style="color: #008000;">+</span> RewriterUtils.<span style="color: #0000FF;">ResolveUrl</span><span style="color: #000000;">&#40;</span>context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">ApplicationPath</span>, rules<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">LookFor</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">+</span> <span style="color: #666666;">&quot;$&quot;</span><span style="color: #008000;">;</span>
             <span style="color: #008080; font-style: italic;">// Create a regular expression object that ignores case...</span>
             Regex re <span style="color: #008000;">=</span> <span style="color: #008000;">new</span> Regex<span style="color: #000000;">&#40;</span>lookFor, RegexOptions.<span style="color: #0000FF;">IgnoreCase</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>   
&nbsp;
             <span style="color: #008080; font-style: italic;">// Check to see if we've found a match</span>
             <span style="color: #008080; font-style: italic;">//注意这里，是用正则匹配requestURL(完整的URL)</span>
             <span style="color: #0600FF;">if</span> <span style="color: #000000;">&#40;</span>re.<span style="color: #0000FF;">IsMatch</span><span style="color: #000000;">&#40;</span>requestURL<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>
             <span style="color: #000000;">&#123;</span>
                 <span style="color: #008080; font-style: italic;">// do any replacement needed</span>
                 <span style="color: #008080; font-style: italic;">//这里也是将requestURL(完整的URL)进行替换</span>
                 sendToUrl <span style="color: #008000;">=</span> RewriterUtils.<span style="color: #0000FF;">ResolveUrl</span><span style="color: #000000;">&#40;</span>context.<span style="color: #0000FF;">Request</span>.<span style="color: #0000FF;">ApplicationPath</span>, re.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>requestURL, rules<span style="color: #000000;">&#91;</span>i<span style="color: #000000;">&#93;</span>.<span style="color: #0000FF;">SendTo</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>   
&nbsp;
                 <span style="color: #008080; font-style: italic;">// log info to the Trace object...</span>
                 context.<span style="color: #0000FF;">Trace</span>.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;RewriterFactoryHandler&quot;</span>, <span style="color: #666666;">&quot;Found match, rewriting to &quot;</span> <span style="color: #008000;">+</span> sendToUrl<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>   
&nbsp;
                 <span style="color: #008080; font-style: italic;">// Rewrite the path, getting the querystring-less url and the physical file path</span>
                 <span style="color: #FF0000;">string</span> sendToUrlLessQString<span style="color: #008000;">;</span>
                 RewriterUtils.<span style="color: #0000FF;">RewriteUrl</span><span style="color: #000000;">&#40;</span>context, sendToUrl, <span style="color: #0600FF;">out</span> sendToUrlLessQString, <span style="color: #0600FF;">out</span> filePath<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>   
&nbsp;
                 <span style="color: #008080; font-style: italic;">// return a compiled version of the page</span>
                 context.<span style="color: #0000FF;">Trace</span>.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;RewriterFactoryHandler&quot;</span>, <span style="color: #666666;">&quot;Exiting RewriterFactoryHandler&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// log info to the Trace object...</span>
                 <span style="color: #0600FF;">return</span> PageParser.<span style="color: #0000FF;">GetCompiledPageInstance</span><span style="color: #000000;">&#40;</span>sendToUrlLessQString, filePath, context<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
             <span style="color: #000000;">&#125;</span>
         <span style="color: #000000;">&#125;</span>
     <span style="color: #000000;">&#125;</span>   
&nbsp;
     <span style="color: #008080; font-style: italic;">// if we reached this point, we didn't find a rewrite match</span>
     context.<span style="color: #0000FF;">Trace</span>.<span style="color: #0000FF;">Write</span><span style="color: #000000;">&#40;</span><span style="color: #666666;">&quot;RewriterFactoryHandler&quot;</span>, <span style="color: #666666;">&quot;Exiting RewriterFactoryHandler&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span> <span style="color: #008080; font-style: italic;">// log info to the Trace object...</span>
     <span style="color: #0600FF;">return</span> PageParser.<span style="color: #0000FF;">GetCompiledPageInstance</span><span style="color: #000000;">&#40;</span>url, filePath, context<span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span>
 <span style="color: #000000;">&#125;</span></pre></div></div>

<div>只需要改动这些，二级域名可以了，虽然是采用动态页，但对于搜索引擎来说是透明的，搜索引擎的?可以得到解决，地址的友好性也得到解决，需求方也觉得很满意，一个皆大欢喜的结局</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/746.html">http://iove.net/archives/746.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/urlrewriter" rel="tag">urlrewriter</a>,<a href="http://iove.net/tag/%e4%ba%8c%e7%ba%a7%e5%9f%9f%e5%90%8d" rel="tag">二级域名</a>,<a href="http://iove.net/tag/%e6%ad%a3%e5%88%99" rel="tag">正则</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/746.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="1249023738" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="2005使用UrlWritter做真正的二级域名" length="" type="" />
<enclosure url="2871" length="" type="" />
<enclosure url="12" length="" type="" />
		</item>
		<item>
		<title>范式、Sql Server底层和.Net Framework 托管</title>
		<link>http://iove.net/archives/738.html</link>
		<comments>http://iove.net/archives/738.html#comments</comments>
		<pubDate>Thu, 26 Jul 2007 21:58:25 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[IT技术]]></category>
		<category><![CDATA[数据库]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[托管]]></category>
		<category><![CDATA[范式]]></category>

		<guid isPermaLink="false">http://61</guid>
        <description><![CDATA[涂雅导读：　　昨天一家外包公司的技术人员给我打电话，问了一些数据库的知识，他问我知道什么叫范式吗？我说不知道。他又问我你知道数据库的底层操作吗？我说不知道。当时他问范式我确实是没反映过来，他问数据库的底层操作我是不知道他指的底层操作是什么东西，后来上网查查资料，基本对底层操作有了一个了解。<br />全文：
		<div>　　昨天一家外包公司的技术人员给我打电话，问了一些数据库的知识，他问我知道什么叫范式吗？我说不知道。他又问我你知道数据库的底层操作吗？我说不知道。当时他问范式我确实是没反映过来，他问数据库的底层操作我是不知道他指的底层操作是什么东西，后来上网查查资料，基本对底层操作有了一个了解。<br />　　一般来说，关系型数据库的范式分为第一至第六范式，我们平常用到的也就是第一、第二、第三范式。关系型数据库必需满足第一范式，否则就不是关系型数据库。<br />　　第一范式指的就是一条记录应该是一行，而不是放到一列，比如公司信息有公司名称、公司地址、联系电话、传真等，这些信息应该都放到一行，而不是在一列，这就是第一范式。<br />　　第二范式指的是一条记录应该有一个唯一区别的字段，也就是主键了，我们在数据库常的主键有自增量、GUID等，主键也是索引键。<br />　　第三范式实际上就是关系库中用得最多的了，一对多，多对多都属于第三范式范畴，这样可能不太好理解。我们这么讲吧，比如说产品的信息中有一个与厂商相关的信息，这个厂商的信息包括名称、地址、电话等，那么我们就应该将厂商的信息独立出来作为一个表，在产品信息表中只一个索引与厂商表的主键相匹配。<br />　　一般来说，我们在建表的过程中，第二范式与第三范式用得最多，第一范式几乎很少用，因为没有主键的记录几乎是没有意义的。但我们在建库的时候是否一定要合乎某一范式呢？我给的答案是No，建库一定要符合实际情况，而不是死搬硬套建库要符合第三范式这个原则。第三范式确实有他的好处，如减少数据冗余，但我们也不能忽略第三范式给我们带来的麻烦，如更加复杂的Sql语句，我们在查询的时候需要用到联接查询或者子查询才能得到结果，这样在使用.Net框架开发中并不太好处理；又如多表查询会减慢速度。所以我们在建库的时候应该根据实际情况来确定是用第三范式还是第二范式，像我先提到的厂商信息与产品信息，就一定要使用第三范式。</div>
<div>&nbsp;</div>
<div>　　关于第二个问题，就是数据库的底层操作，我当时不明白他说的数据库底层是什么东西，后来到网上一查，数据库的底层就是数据库的一些系统表、插入及更新数据等。<br />　　Sql Server在建一个库的时候，每一个库都会有一些系统表，如Sys_Objects、Sys_Columus等，这些表是干嘛的呢，这些表是描述你所建表、存储过程、触发、索引等的信息的，也就是说，你所有建立的表都是保存在系统表中，例如Sys_Columus保存表的列信息。<br />　　另一个是数据库的插入数据方式，当数据在插入时，会有一条临时数据(inserted)；在更新数据时，会先删除原有的记录，将新的记录再插进去；而删除数据就是直接删除了。所以触发时，数据库的动作只有inserted和updated两种，根据这两种特性，在写触发时很有用的。</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>　　还有第三个问题，不记得是哪家公司问我了，是关于.net代码托管的问题，我当是以为是回调机制的托管，因为在C#中是有一个托管的，但他实际问的是.Net的代码托管。<br />　　要想了解托管，我们需要从.Net的工作机制说起，.Net实际是上将你编写的代码编译成中间语言(MSIL)，也就是说不管你使用C#还是.Net，都会编译成为一个MSIL，而不是本地机器码(根据特定的操作系统与特定的硬件环境生成的二进制代码)。在运行的程序的时候，首先必需启动.Net Framework(随操作系统启动的一个服务)来运行你的程序，也就是说.Net Framework是一个环境，你的程序不是运行在操作系统中，而是运行在.Net Framework中。.Net Framework会把你的程序编译成与本地机器相符合的二进制码，叫做Just-in-time(JIT，运行时编译)，运行时编译是一种按需编译的机制。<br />　　这个过程就是托管了，在你的程序被.Net Framework托管的时候，.Net Framework会为你的程序提供垃圾回收机制，直到运行的程序生命周期结束。</div>
<div>　　最后，说一句，其实概念性的东西有时候还是很有用，特别是你在找工作的时候，因为他们一般会考这些，所以要多记一些术语、概念、名词，呵呵</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/738.html">http://iove.net/archives/738.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a>,<a href="http://iove.net/tag/sql-server" rel="tag">sql server</a>,<a href="http://iove.net/tag/%e6%89%98%e7%ae%a1" rel="tag">托管</a>,<a href="http://iove.net/tag/%e8%8c%83%e5%bc%8f" rel="tag">范式</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech" title="查看 IT技术 的全部文章" rel="category tag">IT技术</a>,<a href="http://iove.net/category/tech/database" title="查看 数据库 的全部文章" rel="category tag">数据库</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/738.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="2002" length="" type="" />
<enclosure url="6" length="" type="" />
		</item>
		<item>
		<title>提交了协议冲突 Section=ResponseStatusLine的解决</title>
		<link>http://iove.net/archives/691.html</link>
		<comments>http://iove.net/archives/691.html#comments</comments>
		<pubDate>Mon, 16 Jul 2007 07:04:54 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://7</guid>
        <description><![CDATA[涂雅导读：今天早上开发的时候出现了一个很奇的问题，写完代码一运行，vs.Net提示服务器提交了协议冲突 Section=ResponseStatusLine，很是奇怪，baidu一下，只找到几条记录，看到遇到这种问题的人不多。
<br />全文：
		<p>　今天早上开发的时候出现了一个很奇的问题，写完代码一运行，vs.Net提示服务器提交了协议冲突 Section=ResponseStatusLine，很是奇怪，baidu一下，只找到几条记录，看到遇到这种问题的人不多。<br />在阿牛.乐园的博客中看到了作者的一个日志，只记录了抓包的情况，没有解决的方案，看来只好自己找了。<br />&nbsp; 查看IIS，发现IIS已经被停止，重启IIS报&ldquo;发生意外错误(0x8ffe2740)&rdquo;错误，到网上一查，这个错误是因为80端口被占用，用netstat -a -o -n查看，端口80被PID为700的程序占用，到任务管理器查看，PID700是Skype。这时候我才恍然大悟，原来是Skype在搞鬼，因为新装系统，忘记Skype默认使用80与443端口为备用端口了。<br />　　在任务管理器中，禁止Skype，重启IIS，成功。OK，看到成功在望了，打开VS.Net，打开项目，按F5，心跳中&#8230;..<br />　　哈，没有问题，搞定了，Yeah!!!</p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/691.html">http://iove.net/archives/691.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/691.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="1249013708" length="" type="" />
<enclosure url="1" length="" type="" />
<enclosure url="1274" length="" type="" />
<enclosure url="10" length="" type="" />
		</item>
		<item>
		<title>“当前上下文中不存在名称”问题的解决</title>
		<link>http://iove.net/archives/690.html</link>
		<comments>http://iove.net/archives/690.html#comments</comments>
		<pubDate>Mon, 16 Jul 2007 07:01:56 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://6</guid>
        <description><![CDATA[涂雅导读：一大早起来，编译程序的时候出现“当前上下文中不存在名称xxxx”的问题，但实现页面是存在这些控件的，感觉得奇怪，到网上找资料，找了半天没有得到结果<br />全文：
		<div>一大早起来，编译程序的时候出现&ldquo;当前上下文中不存在名称xxxx&rdquo;的问题，但实现页面是存在这些控件的，感觉得奇怪，到网上找资料，找了半天没有得到结果，最后在CSDN上找到这样的的回复，原贴如下：</div>
<div>
<table cellpadding="0" border="0" cellspaceing="0">
<tbody>
<tr>
<td style="BORDER-RIGHT: #006633 1px solid; BORDER-TOP: #006633 1px solid; FONT-SIZE: 12px; BORDER-LEFT: #006633 1px solid; COLOR: #666666; BORDER-BOTTOM: #006633 1px solid; BACKGROUND-COLOR: #f4fff8">呵呵，我也碰到与楼主一样的问题了，还以为是MS的BUG，想想用了5年了，不可能是BUG吧，查询后，解决了的问题。
<div>&nbsp;</div>
<div>造成这种原因的根本原因在于，当你建一个新文件时，为了方便，我现成的文件来拷贝，结果出现两个相同的。CS类即 partial class，两个不同文件的ASPX相同而ASPx。CS中类却一样的东东，一个的其中文件发生了改变，而另一个根本就没有变化。只是用户根本就不知道啊。</div>
<div>举个例子，你建一个TEST。ASPX ，这时在TEST.ASPX.CS中会生成一个XXX_TEST的类（XXX可能是目录）<br />            然后拷贝粘贴一个TEST。ASPX，改名为TEST123。ASPX，在TEST123。ASPX。CS中的类却根本就没有发生改变，这时候类还是XXX_TEST<br />            这时会出现两个不同的。ASPX文件有一个相同的类代码，只要一方发生改变，另一个就会出错。。。。。。。。。</div>
<div>避免的方法，最好新建文件后复制相同代码即可。</div>
</td>
</tr>
</tbody>
</table>
</div>
<div>原贴地址：<a href="http://community.csdn.net/Expert/topic/4848/4848339.xml?temp=.4387628">http://community.csdn.net/Expert/topic/4848/4848339.xml?temp=.4387628</a></div>
<div>明白了！原来昨天我图方便采用了Save As的办法复制了一个.AspX的页面，所以出现这样的问题<br />解决方法：<br />Copy曾经Save As页面的代码并将之删除，新建一个页面，再将代码Copy进去，解决问题！！！</div>
<div>不知道这是否是.Net的Bug？</div>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/690.html">http://iove.net/archives/690.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/690.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="2180" length="" type="" />
<enclosure url="8" length="" type="" />
		</item>
		<item>
		<title>表达式中出现意外的标记“”</title>
		<link>http://iove.net/archives/688.html</link>
		<comments>http://iove.net/archives/688.html#comments</comments>
		<pubDate>Mon, 16 Jul 2007 06:58:27 +0000</pubDate>
		<dc:creator>涂雅</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[xslt&xml&html&css]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://4</guid>
        <description><![CDATA[涂雅导读：表达式中出现意外的标记“<eof>”。<br />全文：
		<div>　　做Xslt的时候，初学者应该会常遇到一个这样的错误：<br />　　<font color="#ff0000"><strong>表达式中出现意外的标记&ldquo;&lt;eof&gt;&rdquo;。</strong></font> </div>
<div>　　出现这个错误的原因一般是&lt;xsl:value-of select=&quot;&quot;/&gt;，因为select的取值范围必需是一个节点，或者是一个变量，可以是一个不存在的xml节点，但必需是一个已经存在的变量。</div>
<p style="margin:0;padding:0;height:1px;overflow:hidden;">
    <script type="text/javascript"><!--
        var wumiiSitePrefix = "http://iove.net";
        var wumiiEnableCustomPos = false;
        var wumiiParams = "&#038;num=4&#038;mode=3&#038;displayInFeed=1&#038;version=1.0.5.5&#038;pf=WordPress3.0.1";
    //--></script><script type="text/javascript" src="http://widget.wumii.com/ext/relatedItemsWidget.htm"></script><a href="http://www.wumii.com/widget/relatedItems.htm" style="border:0;"><img src="http://static.wumii.com/images/pixel.png" alt="无觅相关文章插件，快速提升流量" style="border:0;padding:0;margin:0;" /></a></p>
©<a target="_blank" href="http://iove.net/">涂雅</a>，本文链接地址为<a target="_blank" href="http://iove.net/archives/688.html">http://iove.net/archives/688.html</a>，转载请保留此链接，否则视为侵权。<hr />标签：<a href="http://iove.net/tag/c" rel="tag">c#</a> 分类：<a href="http://iove.net/category/tech/dot-net" title="查看 .Net 的全部文章" rel="category tag">.Net</a>,<a href="http://iove.net/category/tech/xslt-xml-html-css" title="查看 xslt&amp;xml&amp;html&amp;css 的全部文章" rel="category tag">xslt&amp;xml&amp;html&amp;css</a><h3>联系涂雅</h3><a target="_blank" href="http://t.sina.com.cn/conisyi/">新浪微博</a> | <a target="_blank" href="http://t.qq.com/conisyi">腾讯微博</a>| <a target="_blank" href="http://twitter.com/conisyi">Twitter</a> | <a target="_blank" href="http://www.facebook.com/facebook">Facebook</a> | <a target="_blank" href="https://www.google.com/reader/shared/conis.yi">Google Reader</a> | E-Mail：conis.yi<img src="http://iove.net/images/mailat.gif">gmail.com<br /><h3>涂雅导航</h3><a href="http://iove.net/category/it-comment" target="_blank">IT评论</a> | <a href="http://iove.net/category/tech" target="_blank">IT技术</a> | <a href="http://iove.net/category/quick-news" target="_blank">涂雅速涂</a> | <a href="http://iove.net/feedback" title="给我留言" target="_blank">给我留言</a> | <a href="http://iove.net/friend" title="友情链接" target="_blank">友情链接</a> | <a href="http://iove.net/about" title="关于涂雅" target="_blank">关于涂雅</a>        ]]></description>
		<wfw:commentRss>http://iove.net/archives/688.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="4931" length="" type="" />
<enclosure url="5" length="" type="" />
		</item>
	</channel>
</rss>

