代码改变世界

随笔分类 - C#

在 C# 中 ("x" == "X") 何时成立?

2007-10-31 10:02 by Cat Chen, 4201 阅读, 收藏, 编辑
摘要:这个问题初看起来很奇怪,C#就是C#啊,一门严谨的语言,并且字符串是区分大小写的,无论是在什么情况下都有("x" != "X"),这才叫做一致性嘛。事实上,这在以前一直都是成立的,直到.NET Framework 3.5引入了Linq to Sql,这种一致性就被破坏掉了,变成依赖于环境配置了。 想象一下我们对一个Linq to Sql的DataObject编写一个Linq查询,并且where子句... 阅读全文

十分钟内学会:将HTML格式化为合法的XML

2007-02-07 12:14 by Cat Chen, 9115 阅读, 收藏, 编辑
摘要:Question在网站中需要引入来自外部的HTML,这是很正常的事情。例如允许用户采用HTML直接发表时,或者聚合外部的Feed时,这时候外部的HTML就直接嵌入到我们的代码中。如果我们的网站是设计为符合XHTML的,那就可能因为引入外部HTML而破坏掉XHTML的合法性,甚至连合法的XML都做不到。这时候我们就需要将外部的HTML格式化为合法的XML,以方便我们的处理。Answer要将HTML转... 阅读全文

在 catch 块内进行 throw 的多种方式

2006-11-12 13:49 by Cat Chen, 3647 阅读, 收藏, 编辑
摘要:参考了throw; vs. throw ex; Here's the difference!我才知道在catch块内的throw;和throw ex;是有区别的,以前都不知道可以直接写throw;呢。 这两者的主要不同在于输出的stack trace上: 如果你直接使用throw;,那么stack trace就和根本不存在这个catch块的时候一样,显示错误根源是真正抛出异常的地方。 如果你使... 阅读全文

.NET 里 String 的特性

2006-10-22 15:47 by Cat Chen, 1444 阅读, 收藏, 编辑
摘要: String是指System.String,同时string关键字也是System.String的别名。这里要说的特性都是一些让不理解的人容易犯错的特性。String的第一个特性就是它是引用类型,但很多时候表现起来却像值类型,这是第一个让人容易犯错的地方。String有一个不可破坏的特性(immutable),或者简单叫做只读特性,这意味任何改变String的操作其实都没有改变原本那个... 阅读全文

Script# - 把 C# 编译为 JavaScript

2006-10-22 15:39 by Cat Chen, 1990 阅读, 收藏, 编辑
摘要:原来有一样东西叫做Script#,是Atlas的主要开发者之一的Nikhil Kothari自己编写的一个小框架,目标就是制作一个C#编译器让C#可以直接编译为JavaScript,并且是不经过编译为IL这个步骤。 之前我就说过,以MS的做法如果要想继续宠着那群很RAD的ASP.NET程序员,并且确保他们继续think inside MS's box,那就必须做一个C#到JavaScript的编译... 阅读全文

ASP.NET 2.0 的编译模型并非完全像 MS 说的那样

2006-10-22 14:50 by Cat Chen, 843 阅读, 收藏, 编辑
摘要:上次说到了ASP.NET 2.0解决了Code-Behind需要同步声明控件的问题,说MS的图例解释2.0中aspx和cs的内容不再是继承的关系,而是partial的关系,是合并编译。然后我说了,如果是partial关系,那么处理过程就很复杂。因为partial不能增量编译,也就不能跨语言编译,必须把aspx部分内容完全翻译为cs或者其他对应Code-Behind语言,然后才能够多partial一... 阅读全文

ASP.NET 2.0 解决了 Code-Behind 需要控件声明同步的问题

2006-10-22 14:45 by Cat Chen, 899 阅读, 收藏, 编辑
摘要:这显然是一个非常明智而且很早就应该实现的做法,因为已经在HTML中声明为runat="server"的控件,就应该算是声明过,还要在code-behind中同步的用C#代码再声明一个同名控件显然是违反了《程序员修炼之道》中所谓的DRY(Don't Repeat Yourself)原则。 原本ASP.NET 1.x的编译模型是编译站点时先编译code-behind部分,然后得到code-behind... 阅读全文