<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_♨  NewSea#'s Sky</title><subtitle type="text">大道至简</subtitle><id>http://feed.cnblogs.com/blog/u/21750/rss</id><updated>2012-06-01T09:18:12Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/21750/rss"/><entry><id>http://www.cnblogs.com/newsea/archive/2012/05/28/2521368.html</id><title type="text">利用宏，转换Json数据格式。</title><summary type="text">IE9+，Chrome ，会按Json的Key排序。 这个做法，对需要顺序的数据来说，是个灾难。自定义一个格式，进行数据传递，格式如下：1. 字符串2. 没有树级结构。3. 没有 { } 标志。4. 每一个对象用 “，” 分隔。5. 每一个键值对用 “：” 分隔。如原Json : { "Id": 1 , "Name": “张三” }转换后： "Id:1,Name:张三“Sub Json2MyStringJson() Dim strJson As String Dim ja As String() 'json array Dim jsa </summary><published>2012-05-28T07:11:00Z</published><updated>2012-05-28T07:11:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/05/28/2521368.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/05/28/2521368.html"/><content type="html">&lt;p&gt;IE9+，Chrome ，会按Json的Key排序。 这个做法，对需要顺序的数据来说，是个灾难。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;自定义一个格式，进行数据传递，格式如下：&lt;/p&gt;&lt;p&gt;1. 字符串&lt;/p&gt;&lt;p&gt;2. 没有树级结构。&lt;/p&gt;&lt;p&gt;3. 没有 { } 标志。&lt;/p&gt;&lt;p&gt;4. 每一个对象用 &amp;ldquo;，&amp;rdquo; 分隔。&lt;/p&gt;&lt;p&gt;5. 每一个键值对用 &amp;ldquo;：&amp;rdquo; 分隔。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;如原Json : { "Id": 1 , "Name": &amp;ldquo;张三&amp;rdquo; }&amp;nbsp;&lt;/p&gt;&lt;p&gt;转换后： "Id:1,Name:张三&amp;ldquo;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;Sub&lt;/span&gt;&lt;span style="color: #000000;"&gt; Json2MyStringJson()&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; strJson &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; ja &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;()      &lt;span style="color: #008000;"&gt;'&lt;/span&gt;&lt;span style="color: #008000;"&gt;json array&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; jsa &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;()     &lt;span style="color: #008000;"&gt;'&lt;/span&gt;&lt;span style="color: #008000;"&gt; json sub array&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; retVal &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;New&lt;/span&gt; List(&lt;span style="color: #0000ff;"&gt;Of&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;&lt;span style="color: #000000;"&gt;)()&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; pja &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;()     &lt;span style="color: #008000;"&gt;'&lt;/span&gt;&lt;span style="color: #008000;"&gt; p proced json array&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;Dim&lt;/span&gt; pjsa &lt;span style="color: #0000ff;"&gt;As&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;()    &lt;span style="color: #008000;"&gt;'&lt;/span&gt;&lt;span style="color: #008000;"&gt; p proced json sub array&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;        strJson &lt;/span&gt;=&lt;span style="color: #000000;"&gt; DTE.ActiveDocument.Selection.Text&lt;br/&gt;&lt;br/&gt;        strJson &lt;/span&gt;=&lt;span style="color: #000000;"&gt; strJson.Trim()&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;If&lt;/span&gt; (strJson.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;And&lt;/span&gt; strJson.EndsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)) &lt;span style="color: #0000ff;"&gt;Then&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;            strJson &lt;/span&gt;= strJson.Substring(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;, strJson.Length - &lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;).Trim()&lt;br/&gt;&lt;br/&gt;            ja &lt;/span&gt;= strJson.Split(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;For&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;Each&lt;/span&gt; a &lt;span style="color: #0000ff;"&gt;In&lt;/span&gt;&lt;span style="color: #000000;"&gt; ja&lt;br/&gt;&lt;br/&gt;                jsa &lt;/span&gt;= a.Trim().Split(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;:&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)&lt;br/&gt;&lt;br/&gt;                retVal.Add(jsa(&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;).Trim().Trim(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;c) + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;:&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + jsa(&lt;span style="color: #800080;"&gt;1&lt;/span&gt;).Trim().Trim(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;c))&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;Next&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;            DTE.ActiveDocument.Selection.Text &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + &lt;span style="color: #0000ff;"&gt;String&lt;/span&gt;.Join(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, retVal.ToArray()) + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;Else&lt;/span&gt; : &lt;span style="color: #0000ff;"&gt;MsgBox&lt;/span&gt;(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Json转换器要求格式 { 内容 } &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;End&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;If&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;End Sub&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2521368.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/05/28/2521368.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/05/23/2514891.html</id><title type="text">[转]利用正则表达式，统计代码行数。</title><summary type="text">真是个牛B的想法。原文：http://blog.csdn.net/pyliang_2008/article/details/7406459按CTRL+SHIFT+F (Find in files)，勾上支持正则表达式，然后输入搜索内容：^:b*[^:b#/]+.*$#开头和/开头或者空行都不计入代码量。如果需要只统计代码文件的代码量，可以选择查找文件的类型，比如什么*.xml, *.resx….可以不检查，只查*.cs,*.c,*.h…搜索出来以后最后一行就是代码行数了。</summary><published>2012-05-23T07:44:00Z</published><updated>2012-05-23T07:44:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/05/23/2514891.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/05/23/2514891.html"/><content type="html">&lt;p&gt;真是个牛B的想法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;原文：&lt;a href="http://blog.csdn.net/pyliang_2008/article/details/7406459"&gt;http://blog.csdn.net/pyliang_2008/article/details/7406459&lt;/a&gt;&lt;/p&gt;&lt;p&gt;按CTRL+SHIFT+F (Find in files)，勾上支持正则表达式，然后输入搜索内容：&lt;/p&gt;^:b*[^:b#/]+.*$&lt;p&gt;#开头和/开头或者空行都不计入代码量。&lt;/p&gt;&lt;p&gt;如果需要只统计代码文件的代码量，可以选择查找文件的类型，比如什么*.xml, *.resx&amp;hellip;.可以不检查，只查*.cs,*.c,*.h&amp;hellip;&lt;/p&gt;&lt;p&gt;搜索出来以后最后一行就是代码行数了。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2514891.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/05/23/2514891.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/05/05/2485413.html</id><title type="text">Js 内存泄露追踪</title><summary type="text">环境：windows2008R2 x64 , Ie9 , sIEve.背景：客户端页面刷新内存一直涨。有严重内存泄露。设置 sIEve的IE兼容版本：http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx， AppName写 sIeve的可执行文件名。追踪了两天两夜。网上的方法，试了个遍，用 sIEve 都测试有很多泄露，第一个 27 个， 第二次 2387 个，以后以 2360 个递增， 2360 是所有元素都泄露，包括 script,meta,body,html,div,span,input,img.....把引用的j.</summary><published>2012-05-05T15:26:00Z</published><updated>2012-05-05T15:26:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/05/05/2485413.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/05/05/2485413.html"/><content type="html">&lt;p&gt;环境：windows2008R2 x64 &amp;nbsp;, Ie9 , &amp;nbsp; sIEve.&lt;/p&gt;&lt;p&gt;背景：客户端页面刷新内存一直涨。有严重内存泄露。&lt;/p&gt;&lt;p&gt;设置 sIEve的IE兼容版本：&amp;nbsp;&lt;a href="http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ee330730(v=vs.85).aspx&lt;/a&gt;&amp;nbsp;， AppName写 &amp;nbsp;sIeve的可执行文件名。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;追踪了两天两夜。网上的方法，试了个遍，用 sIEve 都测试有很多泄露，第一个 27 个， 第二次 2387 个，以后以 2360 个递增， 2360 是所有元素都泄露，包括 script,meta,body,html,div,span,input,img.....&lt;/p&gt;&lt;p&gt;把引用的js逐个去除，直到没有Js，还是发现所有元素都泄露。 没有Js啊。&lt;/p&gt;&lt;p&gt;检查了一下Html，把所有Html标签逐个去除。发现罪魁获首是如下标签：&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 16px; color: #ff0000;"&gt;&lt;strong&gt;&amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;这一句，网上的解释： &amp;nbsp;&amp;nbsp;&lt;span&gt;如果安装了GCF，则使用GCF来渲染页面，如果未安装GCF，则使用最高版本的IE内核进行渲染。 见：&amp;nbsp;&lt;a href="http://www.oschina.net/question/54100_17414"&gt;http://www.oschina.net/question/54100_17414&lt;/a&gt;&amp;nbsp;，Google要挖墙角，MS让客户浏览器全部元素内存泄露，即使没有Js ！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;用 sIEve 查看，没有泄露， IE再测试，内存也可以降下来了。&lt;/p&gt;&lt;p&gt;希望可以给正在为 页面内存泄露，并且用了上述 meta 的朋友一点有用信息。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2485413.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/05/05/2485413.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/28/2474818.html</id><title type="text">[转]SVN操作手册</title><summary type="text">原文：http://hi.baidu.com/caiqiupeng/blog/item/2ce2e9df55284e1a622798fa.html1.为什么要用VisualSVN Server，而不用Subversion？回答：因为如果直接使用Subversion，那么在Windows 系统上，要想让它随系统启动，就要封装SVN Server为windws service，还要通过修改配置文件来控制用户权限，另外如果要想以Web方式【http协议】访问，一般还要安装配置Apache，如果是新手，岂不是很头痛？而VisualSVN Serve集成了Subversion和Apache，省去了以上所</summary><published>2012-04-28T03:26:00Z</published><updated>2012-04-28T03:26:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/28/2474818.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/28/2474818.html"/><content type="html">&lt;p&gt;原文：&amp;nbsp;&lt;a href="http://hi.baidu.com/caiqiupeng/blog/item/2ce2e9df55284e1a622798fa.html"&gt;http://hi.baidu.com/caiqiupeng/blog/item/2ce2e9df55284e1a622798fa.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;1.为什么要用VisualSVN Server，而不用Subversion？&lt;/p&gt;&lt;p&gt;回答：&lt;/p&gt;&lt;p&gt;因为如果直接使用Subversion，那么在Windows 系统上，要想让它随系统启动，就要封装SVN Server为windws service，还要通过修改配置文件来控制用户权限，另外如果要想以Web方式【http协议】访问，一般还要安装配置Apache，如果是新手，岂不是很头痛？而VisualSVN Serve集成了Subversion和Apache，省去了以上所有的麻烦。安装的时候SVN Server已经封装为windws service，Apache服务器的配置也只是在图像界面上，指定认证方式、访问端口等简单操作；另外，用户权限的管理也是通过图像界面来配置。&lt;/p&gt;&lt;p&gt;2.为什么不用TFS?&lt;/p&gt;&lt;p&gt;回答:&lt;/p&gt;&lt;p&gt;因为我们一开始就是用Subversion和TortioseSVN,所以就没有更换其他的软件。至于TFS至今没有用过，其实，我只是看了一些的文章而已，对它也不了解。&lt;/p&gt;&lt;p&gt;3.VisualSVN Server是免费的吗？&lt;/p&gt;&lt;p&gt;回答:&lt;/p&gt;&lt;p&gt;是的，VisualSVN Server是免费的，而VisualSVN是收费的。VisualSVN是SVN的客户端，和Visual Studio集成在一起， VisualSvn Server是SVN的服务器端，包括Subversion、Apache和用户及权限管理，优点在上面已经说过了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好了，言归正传，正式开始我们今天的教程。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p align="left"&gt;&lt;span&gt;一、VisualSVN Server的配置和使用方法【服务器端】&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;安装好VisualSVN Server后【安装过程看&lt;a href="http://www.cnblogs.com/ttzhang/archive/2008/11/03/1325102.html"&gt;&lt;span&gt;这里&lt;/span&gt;&lt;/a&gt;】，运行VisualSVN Server Manger，下面是启动界面：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source1.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;好的，下面我来添加一个代码库【Repository】，如下图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source2.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;按上图所示，创建新的代码库，在下图所示的文本框中输入代码库名称：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source3.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;注意：上图中的CheckBox如果选中，则在代码库StartKit下面会创建trunk、branches、tags三个子目录；不选中，则只创建空的代码库StartKit。&lt;/p&gt;&lt;p&gt;点击OK按钮，代码库就创建成功了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source4.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;创建完代码库后，没有任何内容在里面。我会在这个教程的第二部分说明如何迁入源代码。&lt;/p&gt;&lt;p&gt;下面，我们开始安全性设置，在左侧的Users上点击右键：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source5.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source6.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;输入上面的信息，点击OK，我们就创建一个用户了。按照上面的过程，分别添加用户Developer1、tester1、manager1，好了，我们开始添加这些用户到我们刚才创建的项目里：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source7.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击上图中的"Add..."按钮，在下图中选择我们刚才添加的用户,点击OK按钮：&lt;/p&gt;&lt;p&gt;说明：大家可能注意到了下图中的Groups，是的，你也可以先创建组，把用户添加到各个组中，然后对组进行授权，操作比较简单，在此略过。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source8.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;按照下图所示，分别对用户【或组】进行授权：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110308_1656_Source9.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击"确定"按钮，上面的用户就具有了访问StartKit代码库的不同权限。&lt;/p&gt;&lt;p&gt;因为用户starter在团队中是新来者，不希望他向代码库中提交新代码，所以他只能读取代码库中的代码，不能提交代码。tester1是测试人员，不负责代码编写，所以也是只读权限。而Developer1和manager1是开发人员和项目经理，自然具有读、写的权限。&lt;/p&gt;&lt;p&gt;在实际的项目开发过程中，Developer和tester往往不可能只有一个人，这时候使用组来授权更加方便，这个大家可以自己练习一下。&lt;/p&gt;&lt;p&gt;&lt;span&gt;二、TotoiseSVN的基本使用方法&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在&amp;nbsp;&lt;a tabindex="65535" href="http://www.cnblogs.com/ttzhang/archive/2008/11/03/1325102.html"&gt;项目管理实践教程一、工欲善其事，必先利其器【Basic Tools】&lt;/a&gt;中，我已经讲解了怎样安装TortoiseSVN。在上面的讲解中已经讲了怎么使用VisualSVN Server了，今天我要讲的是，TortoiseSVN的简单使用方法。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;一、签入源代码到SVN服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;假如我们使用Visual Studio在文件夹StartKit中创建了一个项目，我们要把这个项目的源代码签入到SVN Server上的代码库中里，首先右键点击StartKit文件夹，这时候的右键菜单如下图所示：&lt;/p&gt;&lt;p&gt;图2-2-1&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN1.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击Import，弹出下面的窗体，其中&lt;a href="http://zt.net.henu.edu.cn/"&gt;&lt;span style="color: #555555;"&gt;http://zt.net.henu.edu.cn&lt;/span&gt;&lt;/a&gt;&amp;nbsp;是服务器名，svn是代码仓库的根目录，StartKit是我们在上个教程中添加的一个代码库：&lt;/p&gt;&lt;p&gt;&lt;span&gt;说明：&lt;/span&gt;左下角的CheckBox，在第一次签入源代码时没有用，但是，在以后你提交代码的时候是非常有用的。&lt;/p&gt;&lt;p&gt;图2-2-2&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN2.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击OK按钮，会弹出下面的窗体，要求输入凭据：&lt;/p&gt;&lt;p&gt;图2-2-3&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN3.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;在上面的窗体中输入用户名和密码，点击OK按钮：&lt;/p&gt;&lt;p&gt;图2-2-4&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN4.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;如上图所示，好了，源代码已经成功签入SVN服务器了。这时候团队成员就可以迁出SVN服务器上的源代码到自己的机器了。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;二、签出源代码到本机&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;在本机创建文件夹StartKit，右键点击Checkout，弹出如下图的窗体：&lt;/p&gt;&lt;p&gt;图2-2-5&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN5.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;在上图中URL of Repository：下的文本框中输入svn server中的代码库的地址，其他默认，点击OK按钮,就开始签出源代码了。&lt;/p&gt;&lt;p&gt;&lt;span&gt;说明：&lt;/span&gt;上图中的Checkout Depth，有4个选项，分别是迁出全部、只签出下一级子目录和文件、只签出文件、只签出空项目，默认的是第一项。上面的例子中，我们也可以使用web的方式访问代码库，在浏览器中输入&lt;a href="http://zt.net.henu.edu.cn/svn/StartKit/"&gt;&lt;span style="color: #555555;"&gt;http://zt.net.henu.edu.cn/svn/StartKit/&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这时候也会弹出对话框，要求输入用户名和密码，通过验证后即可浏览代码库中的内容。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;搞定！源代码已经成功签出到刚才新建的StartKit目录中。&lt;/p&gt;&lt;p&gt;打开StartKit目录，可以看到如下图的文件夹结构：&lt;/p&gt;&lt;p&gt;图2-2-5&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN6.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;一旦你对文件或文件夹做了任何修改，那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件：&lt;/p&gt;&lt;p&gt;图2-2-7&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN7.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;大家看一下不同状态所对应的图片：&lt;/p&gt;&lt;p&gt;图2-2-8&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN8.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;我们已经知道怎么将源代码签入到SVN服务器，怎么从服务器签出代码到本机，也简单了解了不同状态所对应的图案啦。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;三、提交修改过的文件到SVN服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;上面的图2-2-7中，我修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs，下面演示如何提交到SVN服务器。&lt;/p&gt;&lt;p&gt;&lt;span&gt;注意：提交源代码到服务器时，一定确保本机的代码是最新版本，否则可能提交失败，或者造成版本冲突。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;在Model文件夹上点击右键或在Model文件下的空白处点击右键，点击SVN Commit&amp;hellip;弹出下面的窗体：&lt;/p&gt;&lt;p&gt;图2-2-9&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN9.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击OK按钮后，弹出如下图的窗体：&lt;/p&gt;&lt;p&gt;图2-2-10&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN10.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;四、添加新文件到SVN服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们在Model文件下添加一个新的类文件UserInfo.cs，在Model文件下的空白处点击右键，点击SVN Commit&amp;hellip;，和上面讲的提交修改过的文件到SVN服务器一样，就可以了。&lt;/p&gt;&lt;p&gt;另外也可以在文件UserInfo.cs上点击右键，点击TortoiseSVN=&amp;gt;&amp;gt;Add，弹出如下图的窗体：&lt;/p&gt;&lt;p&gt;图2-2-11&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/ttzhang/110508_1648_TortoiseSVN11.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;选中UserInfo.cs文件，点击OK按钮，这样并没有将这个文件提交到SVN服务器，只是将这个文件标记为源代码库库中的文件，并将其状态置为修改状态。之后，我们要再SVN Commit这个文件一次，才可以将其真正提交到SVN服务器上的代码库中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;上面讲是添加文件，实际上，添加文件夹的步骤也是一样的，这里就不说了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;五、更新本机代码与SVN服务器上最新的版本一致&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;这个也很简单，只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键，点击SVN Update，就可以了。&lt;/p&gt;&lt;p&gt;&lt;span&gt;注意：更新操作可能会因为版本冲突而失败，这是可以使用合并【Merge】或其他方法解决；也可能因为锁定【Get Lock】而失败，这是需要先解锁【Release Lock】。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;六、重命名文件或文件夹，并将修改提交到SVN服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;只要在需要重命名的文件或文件夹上点击右键，点击TortiseSVN=&amp;gt;&amp;gt;Rename&amp;hellip;，在弹出的窗体中输入新名称，点击OK按钮，就可以了。此方法也不是直接重命名，而是将该文件或文件夹的名称标记为重命名后名称，也需要我们使用SVN Commit提交到SVN服务器后才真正重命名。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;七、删除文件或文件夹，并将修改提交到SVN服务器&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;最简单就是，你直接删除文件或文件夹，然后使用SVN Commit提交更新到SVN服务器。另外一种方法是在你要删除的文件或文件夹上点击右键=&amp;gt;&amp;gt;TortoiseSVN=&amp;gt;&amp;gt;Delete删除,此方法也不是直接删除，而是将该文件或文件夹的状态置为删除，也需要我们使用SVN Commit提交到SVN服务器后才真正删除。&lt;/p&gt;&lt;p&gt;&lt;span&gt;说明：实际上，从你把源代码迁签入SVN服务器开始，每一个版本的数据和文件，就算是你已经删除了的，也都可以随时迁出。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;以上只是TortoiseSVN最简单的几个功能，其实他的功能远不止这些，其他的功能大家可以在使用的过程中慢慢体会，有些功能我会在下面的教程中使用到，到时候会和大家讲清楚用法。&lt;/p&gt;&lt;p&gt;&lt;span&gt;注意：向SVN服务器提交源代码的时候，一定不要提交bin、obj等文件夹，否则会很麻烦。但是web项目的bin目录除外，但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;一个好习惯：如果项目中引用了其他的第三方的程序集，比如EnterpriseLibrary、FCKEditor等，这时候不要简单从他们的安装位置引用，而是在你的解决方案下，添加一个Library的目录，把需要的程序集复制到这里，然后从Library目录引用，这样有什么好处，自己想一想吧！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://chenergan.javaeye.com/blog/184471"&gt;&lt;span style="color: #108ac6;"&gt;Tortoise SVN 客户端 基本用法&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;div class="blog_content"&gt;&lt;span style="color: #666666;"&gt;&lt;span style="color: #0b5394;"&gt;1. export 和check out&amp;nbsp;&lt;br /&gt;export 下载源代码&amp;nbsp;&lt;br /&gt;用法：&amp;nbsp;&lt;br /&gt;1、新建一个空的文件夹，右键点击它，可以看到TortoiseSVN菜单以及上面的SVN Checkout。&amp;nbsp;&lt;br /&gt;2、不用管这个Checkout，我们选择TortoiseSVN菜单下的Export...，接着它会让你输入url。&amp;nbsp;&lt;br /&gt;3、比如输入【迷宫探宝】的SVN地址是：http://game-rts-framework.googlecode.com/svn/trunk/&amp;nbsp;&lt;br /&gt;4、其他选项不需要更改，Omit externals不要勾选，HEAD Revision选中表示最新的代码版本，接着点击OK即可将代码导出到这个目录中：）&amp;nbsp;&lt;br /&gt;check out 意思签出，虽然和Export的效果一样是把代码从服务器下载到本地，但是Checkout有验证的功能，Checkout到某处的代码，将会被TortoiseSVN监视，里面的文件可以享受各种SVN的服务。&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;2 .每次提交代码需要注意哪些问题&amp;nbsp;&lt;br /&gt;如果你更新了目录中的文件，提交代码需要用到commit功能，commit的功能不仅仅是上传，他会和服务器上面的文件进行对比，假如你更新了某个文件而服务器上面也有人更新了这个文件，并且是在你checkout之后做的更新，那么它会尝试将你的更新和他人的更新进行融合（merge），假如自动merge不成功，那么报告conflict，你必须自己来手动merge，也就是把你的更新和别人的更新无冲突的写在一起。&amp;nbsp;&lt;br /&gt;commit的时候，最好填写Log信息，这样保证别人可以看到你的更新究竟做了写什么。这就相当于上传文件并且说明自己做了那些修改，多人合作的时候log非常重要。&amp;nbsp;&lt;br /&gt;TortoiseSVN的commit只会上传原先checkout然后又被修改了的文件，假如你新加入了某些文件，需要右键点击文件选择Add，然后文件上面会出现一个加号，在下次commit的时候它就会被upload并且被标记为绿色对勾。没有绿色对勾的文件不会被commit。&amp;nbsp;&lt;br /&gt;假如你需要给带有绿色对勾文件改名或者移动它的位置，请不要使用windows的功能，右键点击它们，TortoiseSVN都有相应的操作。想象这些文件已经不在是你本地的东西，你的一举一动都必须让Tortoise知道。&amp;nbsp;&lt;br /&gt;假如修改了某个文件但是你后悔了，可以右键点击它选择Revert，它将变回上次checkout时候的情况。或者Revert整个工程到任意一个从前的版本.&amp;nbsp;&lt;br /&gt;下面描述在使用Commit时的几个注意点：&amp;nbsp;&lt;br /&gt;-------------如有多个文件需要同时提交，同时文件在不同的目录下，必须找到这些文件的最短目录上点击Commit，TortoiseSVN会搜索被点击目录以及该目录下所有的文件，并将修改变动的文件罗列在列表中。&amp;nbsp;&lt;br /&gt;-------------仔细查看列表中的文件，确定哪些文件时需要更新的，如果不需要更新某个已经变化了的文件，只需要在该文件上点击右键，选择还原操作；选择需要新增的文件，不要将临时文件添加到版本库中。&amp;nbsp;&lt;br /&gt;-------------如遇到文件冲突(冲突：要提交的文件已被其他人改动并提交到版本库中)要启用解决冲突功能。&amp;nbsp;&lt;br /&gt;3. 如何保持本地版本和服务器版本同步&amp;nbsp;&lt;br /&gt;使用update来同步本地和服务器上的代码。同样是右键选择SVN update，所有的更改就会从服务器端传到你的硬盘。注意，假如别人删除了某个文件，那么更新之后你在本地的也会被删除。&amp;nbsp;&lt;br /&gt;如果本地的代码已经被修改，和commit一样会先进行merge，不成功的话就会报告conflict&amp;nbsp;&lt;br /&gt;4 如何在同一个在一个工程的各个分支或者主干之间切换&amp;nbsp;&lt;br /&gt;使用tortoise SVN--&amp;gt;switch&amp;nbsp;&lt;br /&gt;在URL中输入branch或trunk的url地址&amp;nbsp;&lt;br /&gt;5.如何比较两个版本之间的差别&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;本地更改&amp;nbsp;&lt;br /&gt;如果你想看到你的本地副本有哪些更加，只用在资源管理器中右键菜单下选TortoiseSVN&amp;rarr; 比较差异。&amp;nbsp;&lt;br /&gt;与另外一个分支/标签之间的差异&amp;nbsp;&lt;br /&gt;如果你想查看主干程序（假如你在分支上开发）有哪些修改或者是某一分支（假如你在主干上开发）有哪些修改，你可以使用右键菜单。在你点击文件的同时按住Shift键，然后选择TortoiseSVN&amp;rarr; URL比较。在弹出的对话框中，将特别显示将与你本地版本做比较的版本的URL地址。&amp;nbsp;&lt;br /&gt;你还可以使用版本库浏览器，选择两个目录树比较，也许是两个标记，或者是分支/标记和最新版本。邮件菜单允许你使用比较版本来比较它们。阅读第 5.9.2 节 &amp;ldquo;比较文件夹&amp;rdquo;以便获得更多信息。&amp;nbsp;&lt;br /&gt;与历史版本的比较差异&amp;nbsp;&lt;br /&gt;如果你想查看某一特定版本与本地拷贝之间的差异，使用显示日志对话框，选择要比较的版本，然后选择在右键菜单中选与本地拷贝比较差异&amp;nbsp;&lt;br /&gt;两个历史版本的比较&amp;nbsp;&lt;br /&gt;如果你要查看任意已提交的两个历史版本之间的差异，在版本日志对话框中选择你要比较的两个版本(一般使用 Ctrl-更改)，然后在右键菜单中选比较版本差异&amp;nbsp;&lt;br /&gt;如果你在文件夹的版本日志中这样做，就会出现一个比较版本对话框，显示此文件夹的文件修改列表。阅读第 5.9.2 节 &amp;ldquo;比较文件夹&amp;rdquo;以便获得更多信息。&amp;nbsp;&lt;br /&gt;提交所有修改&amp;nbsp;&lt;br /&gt;如果你要在一个视窗中查看某一版本的所有更改，你可以使用统一显示所有比较 (GNU 片段整理)。它将显示所有修改中的部分内容。它很难显示一个全面清晰的比较，但是会将所有更改都集中显示出来。在版本日志对话框中选择某一版本，然后在右键菜单中选择统一显示所有比较。&amp;nbsp;&lt;br /&gt;文件差异&amp;nbsp;&lt;br /&gt;如果你要查看两个不同文件之间的差异，你可以直接在资源管理器中选择这两个文件(一般使用 Ctrl-modifier)，然后右键菜单中选TortoiseSVN&amp;rarr; 比较差异。&amp;nbsp;&lt;br /&gt;WC文件/文件夹与URL之间的比较差异&amp;nbsp;&lt;br /&gt;如果你要查看你本地拷贝中的任一文件与版本库中任一文件之间差异，&amp;nbsp;&lt;br /&gt;谴责信息之间的比较差异&amp;nbsp;&lt;br /&gt;如果你要查看的不仅是比较差异而且包括修改该版本的作者，版本号和日期，你可以在版本日志对话框中综合比较差异和谴责信息。这里有更多详细介绍第 5.20.2 节 &amp;ldquo;追溯不同点&amp;rdquo;。&amp;nbsp;&lt;br /&gt;比较文件夹差异&amp;nbsp;&lt;br /&gt;TortoiseSVN 自带的内置工具不支持查看多级目录之间的差异，但你可以使用支持该功能的外置工具来替代。在这里 第 5.9.4 节 &amp;ldquo;其他的比较/合并工具&amp;rdquo;我们可以介绍一些我们使用过的工具。&amp;nbsp;&lt;br /&gt;6.提交代码时怎样知道自己改了哪些文件，别人改了哪些文件&amp;nbsp;&lt;br /&gt;7. 如何知道某个文件的某一行是谁在哪个版本修改的&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;8. 如何为一个SVN主工程建立分支或tag&amp;nbsp;&lt;br /&gt;创建分支使用步骤：&amp;nbsp;&lt;br /&gt;1、选择你要产生分支的文件，点击鼠标右键，选择[分支/标记...]&amp;nbsp;&lt;br /&gt;2、在[至URL(T)]输入框中将文件重命名为你的分支文件名，输入便于区分的日志信息，点击确认。&amp;nbsp;&lt;br /&gt;3、在SVN仓库中会复制一个你所指定的文件，文件名称就是你所命名的，但是在你的本地目录上看不到新建的分支文件名，要使你的文件更新作用到你的分支上，你必须选择文件，点击鼠标右键，选择[切换...],选择你重命名的文件，点击确定即可。这样你的本地文件就和分支文件关联上了，不要奇怪，这时本地目录上看到的文件名仍然为旧的文件名。&amp;nbsp;&lt;br /&gt;经验小结：&amp;nbsp;&lt;br /&gt;1、如果操作的文件之前还未提交，而你又想把文件提交到新的分支上，记得一定要选择切换&amp;nbsp;&lt;br /&gt;2、SVN分支的管理实际上就是把不同的分支用不同的文件保存，因此你在取得新版本的时候会发现，不同分支的最新文件也会被获取下来。&amp;nbsp;&lt;br /&gt;创建tag操作，相当于把当前的代码版本复制一份到其他地方，然后以这个地方为出发点进行新的开发，与原来位置的版本互不干扰。&amp;nbsp;&lt;br /&gt;对于branches、tags、trunk这三个目录，并不是subversion必需的，而是被总结的一种良好的团队开发习惯，其使用方法为：&amp;nbsp;&lt;br /&gt;1、开发者提交所有的新特性到主干。 每日的修改提交到/trunk：新特性，bug修正和其他。&amp;nbsp;&lt;br /&gt;2、这个主干被拷贝到&amp;ldquo;发布&amp;rdquo;分支。 当小组认为软件已经做好发布的准备（如，版本1.0）然后/trunk会被拷贝到/branches/1.0。&amp;nbsp;&lt;br /&gt;3、项目组继续并行工作，一个小组开始对分支进行严酷的测试，同时另一个小组在/trunk继续新的工作（如，准备2.0），如果一个bug在任何一个位置被发现，错误修正需要来回运送。然而这个过程有时候也会结束，例如分支已经为发布前的最终测试&amp;ldquo;停滞&amp;rdquo;了。&amp;nbsp;&lt;br /&gt;4、分支已经作了标签并且发布，当测试结束，/branches/1.0作为引用快照已经拷贝到/tags/1.0.0，这个标签被打包发布给客户。&amp;nbsp;&lt;br /&gt;5、分支多次维护。当继续在/trunk上为版本2.0工作，bug修正继续从/trunk运送到/branches/1.0，如果积累了足够的bug修正，管理部门决定发布1.0.1版本：拷贝/branches/1.0到/tags/1.0.1，标签被打包发布。&amp;nbsp;&lt;br /&gt;一般建立最初的repository时，就建好这三个目录，把所有代码放入/trunk中，如：要将project1目录下的代码导入repository，project1的结构就是：project1/branches，project1/tags，project1/trunk，project1/trunk/food.c，project1/trunk/egg.pc&amp;hellip;&amp;hellip;，然后将project1目录导入repository，建立最初的资料库。然后export回project1，作为本地工作目录。&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2474818.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/28/2474818.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/19/2456440.html</id><title type="text">NameValueCollection To Json 。</title><summary type="text">原文：http://stackoverflow.com/questions/7003740/how-convert-namevaluecollection-to-json-stringNameValueCollection 转换为 Json 的时候，只把它的Keys 数组 转换为Json ，忽略了 Value ， 方法就是把 NameValueCollection 转换为 字典，再转为Json自定义Json转换类： public static class JsonHelper { public static string ToJson&lt;T&gt;(this T source...</summary><published>2012-04-18T17:52:00Z</published><updated>2012-04-18T17:52:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/19/2456440.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/19/2456440.html"/><content type="html">&lt;p&gt;原文：&lt;a href="http://stackoverflow.com/questions/7003740/how-convert-namevaluecollection-to-json-string"&gt;http://stackoverflow.com/questions/7003740/how-convert-namevaluecollection-to-json-string&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;NameValueCollection &amp;nbsp;转换为 Json 的时候，只把它的Keys 数组 转换为Json ，忽略了 Value ， 方法就是把 NameValueCollection 转换为 字典，再转为Json&lt;/p&gt;&lt;p&gt;自定义Json转换类：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; JsonHelper&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ToJson&amp;lt;T&amp;gt;(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt; T source)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (source == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; nv = source &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; NameValueCollection;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (nv != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行序列化&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; jsonSerializer.Serialize(nv.ToDictionary());&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;执行序列化&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; jsonSerializer.Serialize(source);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;typeparam name="T"&amp;gt;&amp;lt;/typeparam&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="str"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; T FromJson&amp;lt;T&amp;gt;(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; str)&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;where&lt;/span&gt; T : &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt;()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (str.HasValue() == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; T();&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ss = str.Trim().Replace(Environment.NewLine, &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ss.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt; &amp;amp;&amp;amp; ss.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    str &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + str + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (str[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;] == &lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;[&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; jsonSerializer.Deserialize&amp;lt;T&amp;gt;&lt;span style="color: #000000;"&gt;(str);&lt;br/&gt;            }&lt;br/&gt;            Type type &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(T);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; nvType = &lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(NameValueCollection);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (type == nvType ||&lt;span style="color: #000000;"&gt;&lt;br/&gt;                type.IsSubclassOf(nvType))&lt;br/&gt;            {&lt;br/&gt;                JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; dict = jsonSerializer.Deserialize&amp;lt;Dictionary&amp;lt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&amp;gt;&amp;gt;&lt;span style="color: #000000;"&gt;(str);&lt;br/&gt;&lt;br/&gt;                NameValueCollection nv &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; NameValueCollection();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dict == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; T();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; item &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; dict)&lt;br/&gt;                {&lt;br/&gt;                    nv[item.Key] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; item.Value;&lt;br/&gt;                }&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (T)(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt;)nv;&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; jsonSerializer.Deserialize&amp;lt;T&amp;gt;&lt;span style="color: #000000;"&gt;(str);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; T[] Json2Array&amp;lt;T&amp;gt;(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; str)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (str.HasValue() == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; T[&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ss = str.Trim().Replace(Environment.NewLine, &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ss.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;[&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt; &amp;amp;&amp;amp; ss.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) == &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;                {&lt;br/&gt;                    str &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; + str + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                }&lt;br/&gt;            }&lt;br/&gt;&lt;br/&gt;            JavaScriptSerializer jsonSerializer &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; JavaScriptSerializer();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; jsonSerializer.Deserialize&amp;lt;T[]&amp;gt;&lt;span style="color: #000000;"&gt;(str);&lt;br/&gt;        }&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2456440.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/19/2456440.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/17/2454640.html</id><title type="text">Js 定义对象的方法</title><summary type="text">原文：http://yiminghe.iteye.com/blog/696296里面的示例代码 有误。应该如下：var lost = { loc : "Island", location : function () { return this.loc; }, location :function (val) { this.loc = val; } }; lost.location = "Another island";另外， IE8下Object.defineProperty 定义到 String.prototype 上是报错的。兼容一下：jv.defi</summary><published>2012-04-17T15:51:00Z</published><updated>2012-04-17T15:51:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454640.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454640.html"/><content type="html">&lt;p&gt;原文：&lt;a href="http://yiminghe.iteye.com/blog/696296"&gt;http://yiminghe.iteye.com/blog/696296&lt;/a&gt;&lt;/p&gt;&lt;p&gt;里面的示例代码 有误。应该如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; lost =&lt;span style="color: #000000;"&gt; { &lt;br/&gt;     loc : &lt;/span&gt;"Island"&lt;span style="color: #000000;"&gt;, &lt;br/&gt;     location : &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; () { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.loc; }, &lt;br/&gt;     location :&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;function&lt;/span&gt; (val) { &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.loc =&lt;span style="color: #000000;"&gt; val; } &lt;br/&gt;}; &lt;br/&gt;lost.location &lt;/span&gt;= "Another island";&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外， IE8下&amp;nbsp;&lt;span&gt;Object.defineProperty 定义到 String.prototype 上是报错的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;兼容一下：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;jv.defineProperty = &lt;span style="color: #0000ff;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; (target, functionName, func, isEnumerable) {&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (target[functionName]) &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($.browser.msie &amp;amp;&amp;amp; (parseInt($.browser.version) &amp;lt; 9&lt;span style="color: #000000;"&gt;)) {&lt;br/&gt;        target[functionName] &lt;/span&gt;=&lt;span style="color: #000000;"&gt; func;&lt;br/&gt;    }&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt; {&lt;br/&gt;        Object.defineProperty(target, functionName, { value: func, enumerable: isEnumerable });&lt;br/&gt;    }&lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2454640.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454640.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/17/2454038.html</id><title type="text">试用 CouchBase。</title><summary type="text">Memcached 问世以来，风声水起，也不断更新着，当初只是做分布式缓存， 到 MemBase ，已经是可以分布式缓存+存储机制的产品了。 最后听说与 CouchDb 合并成了： CacheBase 。试用了一下，效果不错。CacheBase网址：下载服务器端和客户端：http://www.couchbase.com/download教程：http://www.couchbase.com/docs/couchbase-sdk-net-1.0/getting-started.html按照例子做了一个。服务器界面很舒服。例子的配置文件 需要把 servers 的 bucket (桶？) 和 bu</summary><published>2012-04-17T09:32:00Z</published><updated>2012-04-17T09:32:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454038.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454038.html"/><content type="html">&lt;p&gt;Memcached 问世以来，风声水起，也不断更新着，当初只是做分布式缓存， 到 MemBase ，已经是可以分布式缓存+存储机制的产品了。 最后听说与 CouchDb 合并成了： CacheBase 。&lt;/p&gt;&lt;p&gt;试用了一下，效果不错。&lt;/p&gt;&lt;p&gt;CacheBase网址：&amp;nbsp;&lt;/p&gt;&lt;p&gt;下载服务器端和客户端：&amp;nbsp;&lt;a href="http://www.couchbase.com/download"&gt;http://www.couchbase.com/download&lt;/a&gt;&lt;/p&gt;&lt;p&gt;教程：&amp;nbsp;&lt;a href="http://www.couchbase.com/docs/couchbase-sdk-net-1.0/getting-started.html"&gt;http://www.couchbase.com/docs/couchbase-sdk-net-1.0/getting-started.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;按照例子做了一个。服务器界面很舒服。例子的配置文件 需要把 servers 的 bucket &amp;nbsp;(桶？) 和 bucketPassword 清空。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;监视器能监测到缓存使用情况。还不清楚它是如何存储 （Auto-failover） 的。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2454038.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/17/2454038.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/12/2444405.html</id><title type="text">GetHashCode 笔记 。</title><summary type="text">MSDN：http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.80).aspx在做比较的时候，遇到了如下问题：http://www.cnblogs.com/LoveJenny/archive/2011/08/01/2124233.html我自定义了 XmlDictionary&lt;TKey,TValue&gt; : Dictionary&lt;TKey,TValue&gt; , 没有重写GetHashCode ，发现 Distinct 不管用，没有调试进入 Equals 方法，但进入了 GetHashC</summary><published>2012-04-12T09:55:00Z</published><updated>2012-04-12T09:55:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2444405.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2444405.html"/><content type="html">&lt;p&gt;MSDN：&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.80).aspx"&gt;http://msdn.microsoft.com/zh-cn/library/system.object.gethashcode(v=vs.80).aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;在做比较的时候，遇到了如下问题：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/LoveJenny/archive/2011/08/01/2124233.html"&gt;http://www.cnblogs.com/LoveJenny/archive/2011/08/01/2124233.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我自定义了 XmlDictionary&amp;lt;TKey,TValue&amp;gt; : Dictionary&amp;lt;TKey,TValue&amp;gt; &amp;nbsp;, 没有重写&amp;nbsp;GetHashCode ，发现 Distinct 不管用，没有调试进入 Equals 方法，但进入了 GetHashCode 方法。&lt;/p&gt;&lt;p&gt;调试发现：&lt;/p&gt;&lt;p&gt;当&amp;nbsp;GetHashCode &amp;nbsp;返回值相同的时候， 才执行 Equals 方法。 豁名明白为什么要有这两个方法的设计，为什么说： GetHashCode 不保证唯一。&lt;/p&gt;&lt;p&gt;重写&amp;nbsp;XmlDictionary 的 GetHashCode&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetHashCode()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;decimal&lt;/span&gt; retVal = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.All(o =&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                {&lt;br/&gt;                    retVal &lt;/span&gt;+=&lt;span style="color: #000000;"&gt;  o.Value.GetHashCode();&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                });&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;)(retVal % &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;.MaxValue);&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;即可。&lt;/p&gt;&lt;p&gt;当两个 &amp;nbsp;XmlDictionary &amp;nbsp;相同的时候，它们的Key是一致的。所以比较 Value。&lt;/p&gt;&lt;p&gt;当两个&amp;nbsp;XmlDictionary &amp;nbsp;完全不同的时候， 即使它们的Key 不是一致的， 它们的Value 是一致的，也会返回相同的 HashCode ， 没关系。 还有一层 Equals 。&lt;/p&gt;&lt;p&gt;要注意， 继承 IEqualityComparer&amp;nbsp;重写&amp;nbsp;Equals 的时候， 不能写： &amp;nbsp;x == y &amp;nbsp; ， 因为它是引用比较， 它不会调用 x 的 Eqauls 方法。 必须调用 &amp;nbsp;x.Equals ( y ) 方法进行值比较。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2444405.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/12/2444405.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/12/2443268.html</id><title type="text">实在看不懂MSDN关于 Any 的解释。</title><summary type="text">1.引用MSDN的AnyEnumerable.Any&lt;TSource&gt;方法 (IEnumerable&lt;TSource&gt;, Func&lt;TSource, Boolean&gt;)发送反馈确定序列中的任何元素是否都满足条件。命名空间：System.Linq程序集：System.Core（在 System.Core.dll 中）语法类型参数TSourcesource中的元素的类型。参数source类型：System.Collections.Generic.IEnumerable&lt;TSource&gt;一个IEnumerable&lt;T&gt;，其元素将应用谓词。p</summary><published>2012-04-11T17:58:00Z</published><updated>2012-04-11T17:58:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443268.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443268.html"/><content type="html">&lt;div class="OH_topic"&gt;&lt;span style="font-size: medium;"&gt;&lt;span style="line-height: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;strong&gt;1.引用MSDN的Any&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="OH_topic"&gt;&lt;div class="OH_title"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="OH_tdTitleColumn"&gt;Enumerable&lt;span id="ID0EPDAAA"&gt;.&lt;/span&gt;Any&lt;span id="ID0ENDAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typeparameter"&gt;TSource&lt;/span&gt;&lt;span id="ID0ELDAAA"&gt;&amp;gt;&lt;/span&gt;方法 (IEnumerable&lt;span id="ID0EJDAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typeparameter"&gt;TSource&lt;/span&gt;&lt;span id="ID0EHDAAA"&gt;&amp;gt;&lt;/span&gt;, Func&lt;span id="ID0EFDAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="typeparameter"&gt;TSource&lt;/span&gt;, Boolean&lt;span id="ID0ECDAAA"&gt;&amp;gt;&lt;/span&gt;)&lt;/td&gt;&lt;td class="OH_tdLogoColumn"&gt;&lt;img id="VSLogo" title="Visual Studio 2010" src="http://127.0.0.1:47873/help/1-5636/ms.help?C:\\Program%20Files\\Microsoft%20Help%20Viewer\\v1.0\\dev10.mshc;/VS_logo_bk.gif" alt="Visual Studio 2010" /&gt;&lt;img id="VSLogoHC" title="Visual Studio 2010" src="http://127.0.0.1:47873/help/1-5636/ms.help?C:\\Program%20Files\\Microsoft%20Help%20Viewer\\v1.0\\dev10.mshc;/VS_logo_wh.gif" alt="Visual Studio 2010" /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="OH_feedbacklink"&gt;&lt;a href="mailto:DevDocs@Microsoft.com?subject=MSDN%5e*bb534972%5e*VS%5e*100%5e*ZH-CN&amp;amp;body=Visual%20Studio%20Feedback%20Policy%3a%20http%3a%2f%2fmsdn.microsoft.com%2fzh-cn%2flibrary%2fee264131(VS.100).aspx" target=""&gt;发送反馈&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;div&gt;&lt;div class="summary"&gt;&lt;p&gt;确定序列中的任何元素是否都满足条件。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;strong&gt;命名空间：&lt;/strong&gt;&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=N%3ASYSTEM.LINQ&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;System.Linq&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;程序集：&lt;/strong&gt;System.Core（在 System.Core.dll 中）&lt;div class="OH_CollapsibleAreaRegion"&gt;&lt;div class="OH_regiontitle"&gt;语法&lt;/div&gt;&lt;div class="OH_CollapsibleArea_HrDiv"&gt;&lt;hr class="OH_CollapsibleArea_Hr" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="OH_clear"&gt;类型参数&lt;/div&gt;&lt;div id="genericParameters"&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;TSource&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;&lt;p&gt;&lt;span class="parameter"&gt;source&lt;/span&gt;&amp;nbsp;中的元素的类型。&lt;/p&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;div id="parameters"&gt;&lt;h4 class="subHeading"&gt;参数&lt;/strong&gt;&lt;/p&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;source&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;类型：&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.COLLECTIONS.GENERIC.IENUMERABLE%601&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;System.Collections.Generic&lt;span id="ID0EBFABMGAAAAA"&gt;.&lt;/span&gt;IEnumerable&amp;nbsp;&lt;/a&gt;&lt;span id="ID0EEABMGAAAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="selflink"&gt;TSource&lt;/span&gt;&lt;span id="ID0ECABMGAAAAA"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;一个&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.COLLECTIONS.GENERIC.IENUMERABLE%601&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;IEnumerable&lt;span id="ID0ECABABAABMGAAAAA"&gt;&amp;lt;&lt;/span&gt;T&lt;span id="ID0EAABABAABMGAAAAA"&gt;&amp;gt;&lt;/span&gt;&lt;/a&gt;，其元素将应用谓词。&lt;/dd&gt;&lt;/dl&gt;&lt;dl&gt;&lt;dt&gt;&lt;span class="parameter"&gt;predicate&lt;/span&gt;&lt;/dt&gt;&lt;dd&gt;类型：&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.FUNC%602&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;System&lt;span id="ID0EBHAAMGAAAAA"&gt;.&lt;/span&gt;Func&amp;nbsp;&lt;/a&gt;&lt;span id="ID0EGAAMGAAAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="selflink"&gt;TSource&lt;/span&gt;,&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.BOOLEAN&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;Boolean&lt;/a&gt;&lt;span id="ID0ECAAMGAAAAA"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;用于测试每个元素是否满足条件的函数。&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;div id="returns"&gt;&lt;h4 class="subHeading"&gt;返回值&lt;/strong&gt;&lt;/p&gt;类型：&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.BOOLEAN&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;System&lt;span id="ID0EBCLGAAAAA"&gt;.&lt;/span&gt;Boolean&amp;nbsp;&lt;/a&gt;&lt;br /&gt;如果源序列中的任何元素都通过指定谓词中的测试，则为&amp;nbsp;&lt;span class="input"&gt;true&lt;/span&gt;；否则为&amp;nbsp;&lt;span class="input"&gt;false&lt;/span&gt;。&lt;/div&gt;&lt;h4 class="subHeading"&gt;使用说明&lt;/strong&gt;&lt;/p&gt;在 Visual Basic 和 C# 中，可以在&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=T%3ASYSTEM.COLLECTIONS.GENERIC.IENUMERABLE%601&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;IEnumerable&lt;/a&gt;&lt;span id="ID0EHGAAAAA"&gt;&amp;lt;&lt;/span&gt;&lt;span class="selflink"&gt;TSource&lt;/span&gt;&lt;span id="ID0EFGAAAAA"&gt;&amp;gt;&lt;/span&gt;类型的任何对象上将此方法作为实例方法来调用。当使用实例方法语法调用此方法时，请省略第一个参数。有关更多信息，请参见&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=B8020AAE-374D-46A9-BCB7-8CC2390B93B6&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;扩展方法 (Visual Basic)&lt;/a&gt;或&amp;nbsp;&lt;a class="mtps-internal-link" href="http://127.0.0.1:47873/help/1-5636/ms.help?method=page&amp;amp;id=175CE3FF-9BBF-4E64-8421-FAEB81A0BB51&amp;amp;product=VS&amp;amp;productVersion=100&amp;amp;topicVersion=100&amp;amp;locale=ZH-CN&amp;amp;topicLocale=ZH-CN&amp;amp;embedded=true" target=""&gt;扩展方法（C# 编程指南）&lt;/a&gt;。&lt;div class="OH_clear"&gt;&amp;nbsp;备注&lt;/div&gt;&lt;div class="OH_CollapsibleAreaRegion"&gt;&lt;div class="OH_CollapsibleArea_HrDiv"&gt;&lt;hr class="OH_CollapsibleArea_Hr" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="OH_clear"&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="alert"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;&lt;img class="mtps-img-src" src="http://127.0.0.1:47873/help/1-5636/ms.help?content/Microsoft/store/Development_Frameworks_27543092_VS_100_zh-cn_8.mshc;/IC101471" alt="说明" /&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;p&gt;此方法不返回集合的任何一个元素。而是确定集合的任何元素是否满足某一条件。&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;一旦可确定结果，则停止枚举&amp;nbsp;&lt;span class="parameter"&gt;source&lt;/span&gt;。&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2.解读与误读&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;以上是MSDN的备注，一直用All，在思想上，已向 All 靠拢。 &lt;span style="font-size: 15px; background-color: #ffff99;"&gt;&lt;strong&gt;All的理解是： 进行遍历， 回调返回 false 则停止遍历 。 返回值 = 最后回调的返回值（序列为空，返回true）。&lt;/strong&gt;&lt;/span&gt; 基本上用All 可以实现 Any 所有的事。&lt;/p&gt;&lt;p&gt;但它们返回值&lt;span style="text-decoration: line-through;"&gt;和执行机制&lt;/span&gt;不同&lt;span style="text-decoration: line-through;"&gt;， Any 不延迟执行。 而All 是延迟执行的&lt;/span&gt;。 （它们都是即时执行）&lt;/p&gt;&lt;p&gt;现在说说MSDN的解释，仔细读读Any的MSDN解释，就发现它有多么不可理解。&lt;/p&gt;&lt;p&gt;1.&amp;nbsp;&lt;span&gt;确定序列中的任何元素是否都满足条件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 上面说的不是人话，是计算机话，人理解需要解读： 如果返回 true ， 表示 序列中的所有元素全部满足条件 。 &amp;nbsp;如果返回false，表示序列中存在不满足条件的元素。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;误读：返回true，表示序列中的所有元素全部满足条件。 如果返回false，表示序列中的元素全部不满足条件 。那，部分满足，部分不满足，又如何呢？ 自己跟自己说不通。&lt;/p&gt;&lt;p&gt;2.&amp;nbsp;&lt;span&gt;predicate&amp;nbsp;&lt;/span&gt;&lt;span&gt;用于测试每个元素是否满足条件的函数。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 解读：嗯。如果返回true，表示该元素满足条件， 如果返回false，表示该元素不满足条件 。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 根据1 的理解， 返回true，要继续执行。 返回false 要停止执行。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;3. 返回值：&amp;nbsp;&lt;span&gt;如果源序列中的任何元素都通过指定谓词中的测试，则为&amp;nbsp;&lt;/span&gt;&lt;span class="input"&gt;true&lt;/span&gt;&lt;span&gt;；否则为&amp;nbsp;&lt;/span&gt;&lt;span class="input"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; 解读： 如果回调全部返回true，则返回true， 否则返回false。 根据 2的理解，返回一个 false 就要停止 ，所以，它返回的还是最后一次回调返回值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;4.最后一句， &lt;span&gt;一旦可确定结果，则停止枚举&amp;nbsp;&lt;/span&gt;&lt;span class="parameter"&gt;source&lt;/span&gt;&lt;span&gt;。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 解读： 一旦确定true结果，则停止枚举srouce 。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 误读： 一旦确定 false 结果，是不是也算是确定结果？！！！ 那岂不成了只判断第一个了吗。 自己跟自己又说不通。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3.验证得到正确理解 &amp;nbsp; &amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;理解上的冲突出现了，就在于 &amp;ldquo;任何&amp;rdquo; 这两个字上。 查查词典：&amp;nbsp;&lt;a href="http://cd.kdd.cc/I/FQ/"&gt;http://cd.kdd.cc/I/FQ/&lt;/a&gt;&amp;nbsp; &amp;nbsp;里面的有英语单词的翻译： 任何= Any. &amp;nbsp;很明显的，翻译滥用了&amp;rdquo;任何&amp;ldquo;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 举两个&amp;rdquo;任何&amp;ldquo;的例子来理解： &amp;nbsp;如 "任何人不得入内&amp;ldquo;，&amp;rdquo;任何人都可以进来&amp;ldquo; 。&lt;/p&gt;&lt;p&gt;经代码验证，上面的理解，2,4 &amp;nbsp;是正确的。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] str = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;[] { &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;abc&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;b&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; };&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; d = str.Any(o =&amp;gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;            {&lt;br/&gt;                Console.WriteLine(o);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; o.Length &amp;gt; &lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            });&lt;br/&gt;&lt;br/&gt;            Console.WriteLine(d);&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;上面输出：&lt;/p&gt;&lt;p&gt;a&lt;br /&gt;abc&lt;br /&gt;True&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;正确&lt;strong&gt;&lt;span style="background-color: #ffff99; font-size: 16px;"&gt;对Any的理解： 进行遍历，回调返回 true 即停止遍历，返回值=最后回调的返回值（序列为空，返回 false）&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="background-color: #ffff99; font-size: 16px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4.分析滥用行为&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对比All，确认，All 可以做 Any 的任何事情。 下面分析滥用行为：&lt;/p&gt;&lt;p&gt;滥用1: 确定序列中的任何元素是否都满足条件。&lt;/p&gt;&lt;p&gt;&amp;nbsp; 可能是机器翻译的结果。 应该是 &amp;nbsp;确定序列中是否存在满足条件的任一元素。&lt;/p&gt;&lt;p&gt;&amp;nbsp;滥用2：返回值：&amp;nbsp;如果源序列中的任何元素都通过指定谓词中的测试，则为&amp;nbsp;&lt;span class="input"&gt;true&lt;/span&gt;；否则为&amp;nbsp;&lt;span class="input"&gt;false&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="input"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 有任何一个通过，就停止遍历， 何谈任何元素通过测试？ &amp;nbsp;应该是： 如果有任一元素通过测试，则为true，否则为false。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="input"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="input"&gt;这也是大家对MSDN的Linq，弄不明白的地方之一，看MSDN看不明白，总是通过其它开发者的解读和测试来达到自己的理解的原因。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2443268.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443268.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/newsea/archive/2012/04/12/2443239.html</id><title type="text">遇到一个面向对象无法解决的问题。</title><summary type="text">如下代码所示：public abstract class ReadOnlyRuleBase{ public abstract string GetName() ;}public abstract class RuleBase: ReadOnlyRuleBase{ public override string GetName() { return "MyTable" ;}}public class MyTable: RuleBase{ //我想在这里添加约束，一定要重写 GetName 方法。怎么办？}即： 孙类一定要继承某类的虚方法。后来，变通处理：public...</summary><published>2012-04-11T16:20:00Z</published><updated>2012-04-11T16:20:00Z</updated><author><name>NewSea.</name><uri>http://www.cnblogs.com/newsea/</uri></author><link rel="alternate" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443239.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443239.html"/><content type="html">&lt;p&gt;如下代码所示：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReadOnlyRuleBase&lt;br/&gt;{&lt;br/&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetName() ;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; RuleBase: ReadOnlyRuleBase&lt;br/&gt;{&lt;br/&gt;       &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetName() { return "MyTable" ;}&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public class&lt;/span&gt;&lt;span style="color: #000000;"&gt; MyTable: RuleBase&lt;br/&gt;{&lt;br/&gt;      &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;我想在这里添加约束，一定要重写 GetName 方法。怎么办？&lt;/span&gt;&lt;br/&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;即： 孙类一定要继承某类的虚方法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;后来，变通处理：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt; IReadOnlyRule&lt;br/&gt;{&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt; IWriteableRule&lt;br/&gt;{&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; RuleBase&lt;br/&gt;{&lt;br/&gt;     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetName() ;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; MyTable:RuleBase , IWriteableRule&lt;br/&gt;{&lt;br/&gt;     &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetName(){ &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MyTable&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; ;} &lt;br/&gt;}&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;后来，想到一个变通的办法：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; ReadOnlyRuleBase&lt;br/&gt;{&lt;br/&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetName() ;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; RuleBase: ReadOnlyRuleBase&lt;br/&gt;{&lt;br/&gt;       &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; GetName() { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetRuleName() ;}&lt;br/&gt;&lt;br/&gt;       &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;abstract&lt;/span&gt;  &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetRuleName() ;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; MyTable: RuleBase&lt;br/&gt;{&lt;br/&gt;      &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 一定要重写  GetRuleName ， 来达到重写爷类的 GetName 方法的目的。&lt;/span&gt;&lt;br/&gt;}&lt;/div&gt;&lt;img src="http://www.cnblogs.com/newsea/aggbug/2443239.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/newsea/archive/2012/04/12/2443239.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
