<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_heros</title><subtitle type="text">程序开发</subtitle><id>http://feed.cnblogs.com/blog/u/32618/rss</id><updated>2012-05-09T17:15:11Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/32618/rss"/><entry><id>http://www.cnblogs.com/heros/archive/2012/05/10/2493600.html</id><title type="text">摆脱MarshalByRefObject和DynamicProxy显示接口</title><summary type="text">摆脱MarshalByRefObject和DynamicProxy显示接口</summary><published>2012-05-09T17:03:00Z</published><updated>2012-05-09T17:03:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2012/05/10/2493600.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2012/05/10/2493600.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros"&gt;&amp;nbsp; &amp;nbsp; &lt;/a&gt;最近在尝试把系统权限管理功能独立出来，自然的想到通过aop对现有的功能进行拦截，以添加用户权限校验步骤。通常可能是使用RealProxy 和&amp;nbsp;MarshalByRefObject，通过Attribute来标注需要拦截的方法，其实也没什么问题。但是如果是Webform，又希望对Webform中的方法进行拦截就有问题了，不支持类的多继承，MarshalByRefObject就不能用了，所以改用DynamicProxy，但问题又来了，总不能让每个Page都定义接口啊，这样会让现有的程序必须改动。DynamicProxy本身都挺好，就是这个显示接口麻烦，如果去掉这个显示接口就可以像RealProxy一样，方便的对方法进行代理了，（当然也可以用4.0中的dynamic完成对代理对象成员的调用）。&lt;a href="http://www.cnblogs.com/heros"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; DynamicProxy中使用显示接口的作用有两个，一个是通过Emit直接实现接口，创建代理类型；二是在调用时可以使用接口来完成对代理成员的访问，在IDE中也可以有Intelligence提示。如果可以用被代理类型直接做为代理类型的父类，一切就都好办了。&lt;a href="http://www.cnblogs.com/heros"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; 办法分两步，一，提取代理类型成员签名，直接用Emit生成接口，用生成接口代替了显示定义接口；二，在代理类型创建时直接使用被代理类型做父类。被代理成员要用virtual标识。（最新尝试，不生成接口，直接用被代理对象类型为生成的代理的父类型就可以了，类似Castle.DynamicProxy）。&lt;a href="http://www.cnblogs.com/heros"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;typeBuilder.SetParent(objType);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;objType 被代理对象类型&lt;br/&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;或者在DefineType时候直接指定parentType&lt;/span&gt;&lt;br/&gt;TypeBuilder typeBuilder =&lt;span style="color: #000000;"&gt; moduleBuilder.DefineType(&lt;br/&gt;                    dynamicTypeName, typeAttributes, objType, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;);&lt;/div&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;在实用时候，可以保留接口部分。比如被代理类型为sealed，就换用object做父类型，同时实现接口(配合dynamic)或显示接口。&lt;a href="http://www.cnblogs.com/heros"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&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;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Computer&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;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; TestDymaticProxy()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;var&lt;/span&gt; computer = (Computer)DynamicProxy.SecurityProxy.NewInstance(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Computer());&lt;br/&gt;            computer.GetPrice2();&lt;br/&gt;            dynamic com &lt;/span&gt;= DynamicProxy.SecurityProxy.NewInstance(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Computer());&lt;br/&gt;            com.GetPrice2();&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;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetPrice()&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GetPrice&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;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;virtual&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetPrice2()&lt;br/&gt;        {&lt;br/&gt;            Console.WriteLine(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;GetPrice2&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;/div&gt;&lt;p&gt;&amp;nbsp;http://files.cnblogs.com/heros/DynamicProxy.rar&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/2493600.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2012/05/10/2493600.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2011/12/27/2303157.html</id><title type="text">url不重复会造成asp.net的私有缓存占用内存过高</title><summary type="text">url不重复会造成asp.net的私有缓存占用内存过高</summary><published>2011-12-27T02:57:00Z</published><updated>2011-12-27T02:57:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2011/12/27/2303157.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2011/12/27/2303157.html"/><content type="html">&lt;p&gt;asp.net中会对url做MapPath缓存，并且这个缓存的过期时间是never。当url中带有不重复参数时，会造成url的不重复，同时会造成asp.net的私有缓存中存储大量MapPathCacheInfo对象，缓存类型是System.Web.Cache.CacheEntry。在asp.net4正式版中提供了补丁可以对asp.net4版本上的这个问题进行修补&lt;a href="http://support.microsoft.com/kb/2504047"&gt;http://support.microsoft.com/kb/2504047&lt;/a&gt;，修补后可以通过在System.web中添加配置项&amp;lt;hostingEnvironment urlMetadataSlidingExpiration="hh:mm:ss"/&amp;gt;来控制私有缓存的过期时间，建议将urlMetadataSlidingExpiration设置为00:00:00。&lt;br /&gt;记录&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/2303157.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2011/12/27/2303157.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2011/03/08/1977001.html</id><title type="text">回“血泪八条---给中国IT教育培训机构” （因评论一再被银光小子删除，所以决定另开一文）</title><summary type="text">回“血泪八条---给中国IT教育培训机构” （因评论一再被银光小子删除，所以决定另开一文）</summary><published>2011-03-08T03:18:00Z</published><updated>2011-03-08T03:18:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2011/03/08/1977001.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2011/03/08/1977001.html"/><content type="html">&lt;p&gt;因为评论内容一再被&lt;a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/MySilverlight/"&gt;银光小子&lt;/a&gt;删除，所以决定另开一文。&lt;strong&gt;此为水文，一会本人会自行移除。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;对于&lt;a href="http://www.cnblogs.com/MySilverlight/" class="headermaintitle" id="Header1_HeaderTitle"&gt;银光小子&lt;/a&gt;删评论的原因，呵呵，不想过多猜测，套句时下流行的话，你懂的。不过这种行为还是挺阴暗的。&lt;/p&gt;&lt;p&gt;首先,培训机构是商业机构，在这个浮躁的炒的年代，不要奢望一个商业机构能有多么的踏实。&lt;/p&gt;&lt;p&gt;学费高:是商业运作成本的问题，培训机构招进一名学员的成本平均在2000元+，另外加盟成本是学生交的钱的25%以上，一个培训中心就不可能靠低学费来生存。&lt;/p&gt;&lt;p&gt;教职水平低：这一点不能一概而论，但也是个实际存在的现象，出于成本考虑，培训机构给教员开的薪水基本上是底薪加课时提成，每个月没日没夜的上到200课时的课也就能挣个10k&lt;br /&gt;。200课时是个什么概念，也就是30天每天讲6节课。可以自己试试，找个人坐下来喝茶聊天六个钟头你也受不了。一个有成熟开发经验的人，如果在公司正常的职业发展，&lt;br /&gt;两三年也就轻轻松松差不多这个薪资(我说的是有成熟开发经验的人)。真有能力的谁愿意放弃自己的职业发展，教一辈子书呢。&lt;br /&gt;本人不才，原来也做过教员，本人水平不行，但在中心能算是技术高手，也就可见一斑了。&lt;/p&gt;&lt;p&gt;夸大的广告：这一点也不是仅是培训行业的事，电视上的广告哪一个不夸大、哪一个挑不出虚假？另外不打广告也是不可能的事，很多品牌效应不是靠产品，而就是靠成功的广告。&lt;br /&gt;培训机构的学员大部分就是被高考筛选下来的，整体学习素质就差一些，想在一年的时间就把他们打造成实力精英并以此深巷飘香，你觉得可能吗。&lt;/p&gt;&lt;p&gt;培训机构确有很多万恶之行为，但话说回来，你本可以不去参加，真的有理想有毅力，就像老赵说的那样自学成才，何苦如今在此抱怨呢。&lt;/p&gt;&lt;p&gt;软件开发很大的成本在于自身的修练和积累，即使是初学也需要通过大量的练习来沉淀自己的经验。而这些关键的东西，培训中心给不了。&lt;/p&gt;&lt;p&gt;请记住一点，成功的主导在于内因，不要过多的苛求外因。&lt;/p&gt;&lt;p&gt;如果你渴望光明，请先去除自己的阴暗。&lt;/p&gt;&lt;p&gt;重发一下被一再删除的评论内容。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;呵呵，我是搞技术的，对招生一无所知。&lt;br /&gt;另外请不要随便删除评论。 &lt;br /&gt;&lt;br /&gt;重发:&lt;br /&gt;另外每个人的路都是自己的选择，你本可以选择不去参加培训。&lt;br /&gt;每个年轻人，如果你真的有毅力，有理想，就像老赵说的，自己自学成才。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1977001.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2011/03/08/1977001.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2011/01/14/1935706.html</id><title type="text">android gif 图片显示问题</title><summary type="text">关于android显示gif图片网上有很多人都给出了解决方案，但并不是所有gif都能显示。</summary><published>2011-01-14T08:21:00Z</published><updated>2011-01-14T08:21:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2011/01/14/1935706.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2011/01/14/1935706.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;关于android显示gif图片网上有很多人都给出了解决方案。主要是两种，一种是使gif解码器在程序运行时解码gif，并将gif中帧提取并显示。还有一种就是预先用工具将gif帧打散成n张图，程序中切换加载来显示。两种方法都可以解决部分gif图片的显示问题。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;在实际应用中，遇到一些很奇怪的gif图片，有一些帧是非完整图片，这些帧需要在前一些帧基础上合并显示。对于这样的图片逐帧提取单独显示时就会有问题。比如图片中一只小鸟在树林中飞行，那呈现的效果就成了第一张显示出树林，然后显示空白背景中一只小鸟，如果没有处理好小鸟所在帧的宽高和帧坐标，那么显示出的小鸟可能会被拉伸填满imageview区。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;解决方案其实很简单，不能单张单张的呈现帧，要将帧连续起来，另外要将各帧的坐标及宽高信息全部提取并应用到帧的显示中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;gif文件转成字节流后，7、8字节代表gif框宽，9、10字节代表gif框高。在图像数据块的1、2字节表示x坐标偏移，3、4字节表示y坐标偏移，5、6和7、8分别表示当前帧的宽和高&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] bytes &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; stream.toByteArray();&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; width &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; bytes[&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt;bytes[&lt;/span&gt;&lt;span style="color: #000000;"&gt;7&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;gif框宽&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;      &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; height &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; bytes[&lt;/span&gt;&lt;span style="color: #000000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;8&lt;/span&gt;&lt;span style="color: #000000;"&gt;|&lt;/span&gt;&lt;span style="color: #000000;"&gt;bytes[&lt;/span&gt;&lt;span style="color: #000000;"&gt;9&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;gif框高&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;在呈现图片时，用叠加的方式来显示图片，图片绘制时根据容器矩形、gif矩形、帧矩形信息来计算在容器中的绘图区，就不会有问题了。另外记得帧转换成bmp时，颜色取argb，这样可以保留透明等效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;因为是公司项目代码不方便公开提供下载。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1935706.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2011/01/14/1935706.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/12/25/1916937.html</id><title type="text">注意TDes8 -&amp;gt; Expand方法</title><summary type="text">注意TDes8 -&gt; Expand方法</summary><published>2010-12-25T13:42:00Z</published><updated>2010-12-25T13:42:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/12/25/1916937.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/12/25/1916937.html"/><content type="html">&lt;p&gt;今天在写程序时，用到了动态缓冲CBufFlat，在读取数据后想当然的使用了TDes8的Expand()方法将TDes8改为TDes16，当然程序报错了，模拟器直接退出，很显然程序发生严重错误。通过实践后发现Expand并非通过扩展内存区域来实现8bit转16bit，而是使用现有的描述符内存区域大小，只是进行了内存合并，两个8成了一个16，如果8位描述符中信息已经超出了最大长度一半，则会转换失败。Expand方法在使用时还可能因为内存地址非偶数地址而发生转换失败。&lt;/p&gt;&lt;p&gt;随笔记录，以防再错。也请大家指点。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1916937.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/12/25/1916937.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/12/19/1910562.html</id><title type="text">简单的字符串相似度计算</title><summary type="text">Levenshtein distance and string similarity</summary><published>2010-12-19T07:05:00Z</published><updated>2010-12-19T07:05:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/12/19/1910562.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/12/19/1910562.html"/><content type="html">&lt;p&gt;计算Levenshtein 距离，再和较长字符串求比率&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;" onclick="cnblogs_code_show('4a53a2f8-4281-474d-9711-c9ed7ecde4e1')"&gt;&lt;div id="cnblogs_code_open_4a53a2f8-4281-474d-9711-c9ed7ecde4e1" class="cnblogs_code_hide"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; Levenshtein Distance&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; StringExt&lt;br /&gt;    {&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 计算两个字符串的差异距离&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="source"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;来源字符串&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="target"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;目标字符串&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;字符串差距&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; CalcDistance(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; source, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; target)&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; n &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; source.Length;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; m &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; target.Length;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (m &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; n;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (n &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; m;&lt;br /&gt;            var matrix &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;[n &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, m &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; n; i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;            {&lt;br /&gt;                matrix[i, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; i;&lt;br /&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; m; i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;            {&lt;br /&gt;                matrix[&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, i] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; i;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;; i &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; n; i&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;            {&lt;br /&gt;                var si &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; source[i &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; (&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; j &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;; j &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; m; j&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;                {&lt;br /&gt;                    var tj &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; target[j &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; cost;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (si &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; tj)&lt;br /&gt;                        cost &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&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;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                        cost &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; above &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; matrix[i &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, j] &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; left &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; matrix[i, j &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; diag &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; matrix[i &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, j &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;] &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; cost;&lt;br /&gt;                    matrix[i, j] &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Math.Min(above, Math.Min(left, diag));&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: #000000;"&gt; matrix[n, m];&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: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 计算两个字符串的相似度&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="source"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;来源字符串&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;param name="target"&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;目标字符串&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; &lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;相似度&lt;/span&gt;&lt;span style="color: #808080;"&gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; CalcSimilarity(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; source, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; target)&lt;br /&gt;        {&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; n &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; source.Length;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; m &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; target.Length;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (n &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;||&lt;/span&gt;&lt;span style="color: #000000;"&gt; m &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&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;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&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;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; distance &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; source.CalcDistance(target);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; max &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Math.Max(n, m);&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1.0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt; (max &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; distance) &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt; max;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1910562.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/12/19/1910562.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/12/06/1897629.html</id><title type="text">[转]Carbide.VS 3.0.1的安装问题</title><summary type="text">Carbide.VS 3.0.1的安装问题</summary><published>2010-12-06T04:24:00Z</published><updated>2010-12-06T04:24:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/12/06/1897629.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/12/06/1897629.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;在Carbide.VS过程中一个常见的问题是检测不到已安装的SDK，特别是S60v3 FP2。这样的话，安装无法完成，恼人得很。找了很久才找到&lt;a href="http://wiki.forum.nokia.com/index.php/KIS001048_-_S60_Platform_SDK_-_Workarounds_and_Updates#S60_3rd_Edition.2C_FP2_SDK_v1.1"&gt;解决的办法&lt;/a&gt;。&lt;br /&gt;&amp;nbsp; 步骤1：&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 打开注册表，找到"HKEY_LOCAL_MACHINE\SOFTWARE\Nokia\"，创建新项"Carbide.vs.30",然后在新项里添加字符串值"ForcePrereq" = "1"。&lt;span style="color: #000000;"&gt;（这一步是为了让安装程序略过SDK的检测）&lt;/span&gt;&lt;br /&gt;&amp;nbsp; 步骤2：&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 安装完成后，下载文件&lt;a class="external text" title="http://wiki.forum.nokia.com/images/a/ad/S60_3rd_FP2_v2.xml.zip" rel="nofollow" href="http://wiki.forum.nokia.com/images/a/ad/S60_3rd_FP2_v2.xml.zip"&gt;S60_3rd_FP2_v2.xml&lt;/a&gt;到&lt;em&gt;&amp;lt;drive:&amp;gt;\Program Files\Common Files\Symbian\SDK Descriptors\Nokia&lt;/em&gt;目录。&lt;span style="color: #000000;"&gt;（这一步是为了让Carbide.VS激活SDK）&lt;/span&gt;&lt;br /&gt;&amp;nbsp; 到此，Carbide.vs就可以正常使用了;-)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;http://files.cnblogs.com/heros/S60_3rd_FP2_v2.xml.zip&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;vs2005开发5th版本sdk的descriptor&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/heros/vs2005%e5%bc%80%e5%8f%915th_Sdk_descriptor%e6%96%87%e4%bb%b6.rar"&gt;5th sdk descriptor&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1897629.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/12/06/1897629.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/10/11/1848358.html</id><title type="text">分享SharpDevelop Asp.net DevServer插件</title><summary type="text">分享SharpDevelop Asp.net DevServer插件</summary><published>2010-10-11T15:55:00Z</published><updated>2010-10-11T15:55:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/10/11/1848358.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/10/11/1848358.html"/><content type="html">&lt;p&gt;因为电脑让给老婆用，自己只有上网本一个，要装vs还是太吃力。SharpDevelop是个好的选择，但是有个问题，asp.net程序开发时运行和调试是个问题，老是要挂到iis上。索性把vs的DevServer移了过来。用插件的方式，增加了Debug in Browser和View in browser右键菜单，直接运行，方便许多。&lt;/p&gt;&lt;p&gt;For SharpDevelop 3.2&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/heros/SharpDevelopWebRunnerAddIn.rar"&gt;http://files.cnblogs.com/heros/SharpDevelopWebRunnerAddIn.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;For SharpDevelop 4.0&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/heros/WebRunner4.rar" target="_blank"&gt;http://files.cnblogs.com/heros/WebRunner4.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2010/29064/2010101123521355.jpg" alt="" width="536" height="302" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1848358.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/10/11/1848358.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/09/28/1837687.html</id><title type="text">算法题:装备合成</title><summary type="text">你有一些合成元素对象，按指定数量的类型的合成元素可以合成一些装备，合成时候会有一些费用，合成的装备可以卖出，合成元素本身可以卖出。合成一个装备后，剩余元素个数只要还够合成，可以继续合成，也可以选择不合成。要求所有东西卖出后收入最大化。一个现实业务精简来的问题，背包、规划或自己的思路都可以。你试一试吧。</summary><published>2010-09-28T08:40:00Z</published><updated>2010-09-28T08:40:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/09/28/1837687.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/09/28/1837687.html"/><content type="html">&lt;p&gt;你有一些合成元素对象，按指定数量的类型的合成元素可以合成一些装备，合成时候会有一些费用，合成的装备可以卖出，合成元素本身可以卖出。合成一个装备后，剩余元素个数只要还够合成，可以继续合成，也可以选择不合成。&lt;/p&gt;&lt;p&gt;要求所有东西卖出后收入最大化。&lt;/p&gt;&lt;p&gt;一个现实业务精简来的问题，背包、规划或自己的思路都可以。你试一试吧。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1837687.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/09/28/1837687.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/heros/archive/2010/07/15/1778315.html</id><title type="text">asp.net treeview 复选后展开的bug</title><summary type="text">第一次展开勾选了复选框的节点后。树的层次关系会乱掉。通过检查生成的html，发现原来是生成的html中缺少了用来完成缩进的div。不知道是不是asp.net4的bug。记得旧版本上没有问题的。http://files.cnblogs.com/heros/ADTreeView.rar</summary><published>2010-07-15T10:00:00Z</published><updated>2010-07-15T10:00:00Z</updated><author><name>heros</name><uri>http://www.cnblogs.com/heros/</uri></author><link rel="alternate" href="http://www.cnblogs.com/heros/archive/2010/07/15/1778315.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/heros/archive/2010/07/15/1778315.html"/><content type="html">&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/img/heros/201007/2010071517542026.jpg" /&gt;&lt;/p&gt;&lt;p&gt;第一次展开勾选了复选框的节点后。树的层次关系会乱掉。通过检查生成的html，发现原来是生成的html中缺少了用来完成缩进的div。不知道是不是asp.net4的bug。记得旧版本上没有问题的。&lt;/p&gt;&lt;p&gt;http://files.cnblogs.com/heros/ADTreeView.rar&lt;/p&gt;&lt;img src="http://www.cnblogs.com/heros/aggbug/1778315.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/heros/archive/2010/07/15/1778315.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
