随笔分类 - C#
摘要:最近在网上看到一篇很好的文章, 讨论如何安全有效的引发事件.也许你不一定要用到下面相同的解决方案, 但是至少你应该知道在引发事件时候需要考虑的问题.引发事件的问题引发事件是一个非常容易的事情, 但是的确也有它的误区. 让我们举个例子. 假设我们写个消息接收器, 每当我们收到一个新消息, 我们引发一个包含了新消息的事件 MessageReceived.安装我们通常的方法,就是:public class MessageReceivedEventArgs : EventArgs{ // 接收到的消息 public string Message { get; private set; } ...
阅读全文
摘要:首先我想解释一下标题中两个关键字: "快乐", "ASP.NET程序员".有的人想成为一个"杰出"的程序员, 或者"资深"的程序员, 简单来说就是"大牛"级的人物 -- 但是本文不是针对此种发展方向不是说我不鼓励大家朝这方向走, 而是对我而言我更看重"快乐"的本身. -- 而且除非你是天才导致"杰出"或者"资深"是同时需要正确的态度和漫长的过程.那么为什么单单谈"ASP.NET程序员" -- 这是对我本人的写照, 也
阅读全文
摘要:最近的一个项目用到很多不同结构的XML文件. 于是就在网上搜索了一些文章, 结合实际遇到的问题写成自己要的代码.既然已经获取了这方面的知识,不敢独取, 拿出来共享. 这个也还不是很成熟, 希望大家共同完善, 提出宝贵意见, 共同进步.目标基于已经有的XML文件,例如:<root> <books> <book> <author>John Savacki</author> <title>E.G.Title</title> <price>20.50</price> </book>
阅读全文
摘要:在CodePlex 上经常可以发现一些好东西, 关键是有没有时间去淘宝.前几天就发现一个, 并且在实际工作中使用了:* DoddleReport你有没有被要求基于来自数据库的数据,生成一个报表? 我们时不时会有类似的需求.DoddleReport极大的简化了这方面的工作量.首先你需要下载它的Dll 文件, 可以到 codeplex 中得到http://doddlereport.codeplex.com/或者直接从这里下载: cnblogs下载地址得到的是一样的文件, 将它解压到你的一个asp.net 网站的bin目录下. 你就可以引用Doddle的类了.我们来模拟一个场景(本场景是根据Dodd
阅读全文
摘要:延迟加载(lazy loading) 设计模式是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据(读取属性值)的时候,才真正执行数据加载操作. 有效使用它可以大大提高系统性能. 为了便于理解, 我们来建立一个场景, 假设我们要构造一个Hero(英雄) 类, 每个Hero 有自己的名字和(SpecialSkill)特殊技能. 建模 这是一种建立的方法: 运行程序后输出如下, ...
阅读全文
摘要:线程可以使你的项目运行得更加的流畅.什么是线程呢?线程(thread)是程序执行流的最小单元, 是程序中一个单一的顺序控制流程. 每个程序最少有一个线程, 那就是程序本身.在C#中, 你可以使用 System.Threading 提供的类,接口和方法实现线程的所有操作.单线程操作想象着你走进快餐店, 大叫一声"来碗兰州拉面", 然后就坐在饭桌上等. 当厨师听到你的要求时,他就开始做兰州拉面了. 理论上讲, 当你叫了以后, 厨师就已经收到了命令.用代码可以这样表达:static void Main(string[] args){ string name = "兰州拉
阅读全文
摘要:我知道很多人都讨论过这个问题, 多我一个不多, 少我一个不少.最近有人又问到这个问题, 所以想再说说. 万丈高楼平地起, 地基很重要. 懂了的人不要嫌罗嗦, 欢迎补充或者纠正.从起源/定义说起Struct 从C 的时代就已经有了(向丹尼斯.里奇致敬), 它是Structure 的缩写 -- 就是结构的意思. 它是一种最初级的数据结构, 它包含一到多个相同类型或不同类型的值或者变量. 它就像是一个存储数据的"包".Class(类) 是有了面向对象概念之后才有的, 它"是创建对象的蓝图,描述了所创建的对象共同的属性和方法".从它们被创立的用途可以看出Clas
阅读全文
摘要:背景前几天有同事问到我一个简单的功能, 就是当你使用枚举时如何给每个一元素增加描述字符串并且可以很容易的读取出来.比如有一个枚举类型是列出对一个问题给出的选项(例如: 同意?不同意?中立?):当选择不同的答案时, 希望得到一些描述性的语句比方说:1. "强烈的反对"2. "反对"3. "持中立观点"4. "同意"5. "完全的同意"当然你可以建立一个数据库表格,存放这些信息, 但是我想起几年前,我...
阅读全文
摘要:当对字符串进行操作时,我们经常要删除或者是替换一部分子字符串。 Remove() 和 Replace() 两个函数在这种情况就派上用场了。Remove() – 删除一部分子字符串我们都知道 substring 可以返回字符串的一部分。 当我们想保留字符串中的一部分substring丢弃其它部分时,就可以使用substring,当我们想删除字符串的一部分并保留其它部分时,就使用Remove。Remove 有两种形式:Remove(int startIndex)删除此字符串中从指定位置到最后位置的所有字符。Remove(int startIndex, int length)从此实例中的指定位置开始
阅读全文
摘要:很多时候处理字符串数据,比如从文件中读取或者存入 - 我们可能需要加入分隔符(如CSV文件中的逗号),或使用一个分隔符来合并字符串序列。很多人都知道使用split()的方法,但使用与其对应的Join()方法的人就没有那么多。今天,让我们看看它们的应用。Split() – 根据分隔符切割字符串成几部分分割符可以是以下几种形式中的一种:只有一个字符的数组:比方对于“A,B,C,D,E,F” 可以使用 ‘,’ 或者 new [] { ‘,’ } 有多个字符的数组:比方对于“A,B-C,D*E,F”使用 new [] { ‘,’ ‘-‘ ‘*’ } :只有一个字符串的数组:比方对于 “A=>B=
阅读全文
摘要:在asp.net中实现captcha的文章,网上已经有很多,解决方案也很成熟:1. 一个用vb写的开源控件:http://www.codeproject.com/KB/custom-controls/CaptchaControl.aspx2. 在 CSharp 中实现captcha控件,基本思想是用bitmap 将文字“画”出来,再用HatchBrush加一些点点。http://www.codeproject.com/KB/aspnet/CaptchaImage.aspx3. 下面这个和第一个是同一个作者,但是运用Csharp实现:http://captcha.codeplex.com/Sou
阅读全文
摘要:今年一月份,我发布了本系列第一篇ASP.NET 快乐建站系列 -- 1. 十五分钟建立精美网站,(汗!七个月过去了…)我没有继续这个系列的原因是Sitefinity发布了最新的版本 Sitefinity 4, 原想等待这个最新平台。好消息是他们的确也提供免费Sitefinity Community Edition, 不幸的是当我尝试用 Sitefinity 4进行开发时,遇到了很多问题。Sitefinity 的确是一个很好的CMS平台,优势是后台管理界面友好,集成了他们母公司自己的强大产品 Rad controls, 在开发中Rad Controls 可以帮助你省很多时间,至于Rad Cont
阅读全文
摘要:今天,我们将着眼于五个用于序列的聚合运算。很多时候当我们在对序列进行操作时,我们想要做基于这些序列执行某种汇总然后,计算结果。Enumerable 静态类的LINQ扩展方法可以做到这一点 。就像之前大多数的LINQ扩展方法一样,这些是基于IEnumerable <TSource>序列的操作。SUM() - 计算整个序列的总和它有两种形式:SUM( )计算整个序列的总值。源类型必须是以下类型之一: int,long,double,decimal,single 或这些类型的可空变种(int?, long?, double?…) 。Sum(Func<TSource, X> p
阅读全文
摘要:概要WebMatrix对于快速建站的确很有帮助,我曾经用它建立基于 Wordpress, Joomla, DNN 等平台的项目,省却了很多设置上的麻烦,只需要傻瓜式的点击下一步和输入一些基本信息即可。文本介绍如何在WebMatrix项目中使用和读取 SQL Server CE 数据库。如果你第一次听说WebMatrix可以参考本系列的前三篇文章。正文1. 打开WebMatrix 选择 site from Template, 再选择 Starter Site 模板。在这里我给网站命名为Starter Site. 然后点击下方的Files, 你可以看到网站的初始结构。2. 点击Databases,
阅读全文
摘要:前段时间忙于各处奔波没有写博,今天想和大家再来看看一个奇妙的函数。 首先假设你不得不处理一些已有的代码,里面用到了nullable(可空值类型)的变量, 你必须要用这变量与不可空变量比较. 使用 <, >, <=, >= 来比较 nullable 值 看下面的代码: 1: int? x = null; 2: 3: if (x < 100) 4: { ...
阅读全文
摘要:谢谢大家之前的关注和热情的回复,本文将继续探讨在System.Linq 下的一些容易被人忽视却可能对你有大帮助的函数。Empty 静态方法有多少次你不得不从一个方法返回一个空集合(无论是由于错误的条件,或者没有项目存在),并创建了一个空数组或列表? 让我们看一个简单的POCO 类,它包含了两个银行帐户转帐的信息: public class Transfer { public string FromAccount { get; set; } public string ToAccount { get; set; } public double Amount { get; set; } }现在,比
阅读全文
摘要:今天我们来看看5种使用Linq函数联接序列的方法,这5种方法可以归入下列两类:同类的联接Concat() Union()不同类的联接Zip() Join() GroupJoin()Concat() – 串联序列最简单的序列合并,concat仅仅是将第二个序列接在第一个序列后面, 注意:返回的序列并没有改变原来元素的顺序: var healthFoods = new List<string> { "fruits", "vegetables", "grains", "proteins" }; var myF
阅读全文
摘要:Linq中的 First 和 Single 在实际工作中会经常看到,从字面意思上很容易明白,一个是取列表中的第一个元素,一个是取到唯一的元素。如果你想再进一步的了解,可以读读本文。下文参考翻译自: C#/.NET Little Wonders: First() and Single() - Similar Yet DifferentFirst() - 返回序列中的第一个元素事实上这个方法有四种选择:First() 返回序列中的第一个,如果没有元素存在就抛出异常 InvalidOperationException. First(Predicate<TSource>) 基于你提供的条件
阅读全文
摘要:这个系列,我和大家一起来学学C#中一些非常有用函数,对于有些人来说可能它们不起眼,因此常常忽略它们。它们不会嚷嚷到:“使用我吧!我会让你节省很多的时间,而且让你的代码变得更加的简洁!” -- 但是,这些话会从对它们熟悉的程序员的脑海中涌现出来。好的!先来看看ToLookup:下文参考翻译自: C#/.NET Little Wonders: The ToLookup() LINQ Extension Method故事的背景让我们先来创建一个简单的类来表示产品,产品有ID,类别,和价格,这个类没有什么特别: public sealed class Product { public int Id {
阅读全文
摘要:在我之前"优雅代码"的文章中我提到了函数大小规定的问题,写出优雅简明代码的论题集 -- Csharp(C#)篇[1]写出优雅简明代码的论题集 -- Csharp(C#)篇[2]在这篇文章中我还想更详细的谈谈为什么好的代码必然不会有大的函数,-- 写小的函数不是我们的目的,但是为了使你的代码可读性强,你开始花时间重构它们,然后,你发现函数开始缩小,类开始缩小。最后你会发现这才是你想要的代码--就像是一本更贴切用户需求的文档。一个函数只做一件事一个函数应该只做一件事,这样不但你能够更好的命名你的函数,理解和阅读代码也变得更加的容易。如果你遇到一个特殊的情况不得不打破这个原则,可
阅读全文