04 2013 档案
params关键字
摘要:params关键字可以指定在参数数目可变处采用参数的方法参数。在方法声明中的params关键字之后不允许任何其他参数,并且在方法声明中只允许一个params关键字。示例:// keywords_params.csusing System;class App{ public static void UseParams(params object[] list) { for (int i = 0; i < list.Length; i++) { Console.WriteLine(list[i]); } } s... 阅读全文
posted @ 2013-04-28 15:24 赶路人之刚出发 阅读(193) 评论(0) 推荐(0) 编辑
配置LINQ中的datacontext的log路径,以记录datacontext执行了的查询sql
摘要:static void Main() { DataClasses1DataContext db = new DataClasses1DataContext(); string filePath = Environment.CurrentDirectory + @"\linq5.txt"; System.IO.TextWriter log = System.IO.File.CreateText(filePath); //指定该datacontext的log文件路径,用以记录查询过程中的sql语... 阅读全文
posted @ 2013-04-28 14:52 赶路人之刚出发 阅读(537) 评论(0) 推荐(0) 编辑
SortedList
摘要:SortedList表示键/值对的集合,这些键/值对基于关联的 System.Collections.Generic.IComparer<T> 实现按照键进行升序排序public class SortedList<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, 阅读全文
posted @ 2013-04-27 17:10 赶路人之刚出发 阅读(262) 评论(0) 推荐(0) 编辑
LINQ join/left join/cross join/group by/group join/sortedlist/cast
摘要:public class Classroom { /// <summary> /// 班级Id /// </summary> public int ClassId { get; set; } /// <summary> /// 班级名称 /// </summary> public string ClassName { get; set; } } public class Student { /// <summary> ///... 阅读全文
posted @ 2013-04-27 15:52 赶路人之刚出发 阅读(424) 评论(0) 推荐(0) 编辑
Linq to objects示例
摘要:与linq to sql类似,所有继承了IEnumerable的类型均可使用LINQ,如下string[]数组基类为Array,而Array实现了IEnumerable,所以也可使用linqstatic void Main(string[] args) { string[] myWords = new string[] { "what", "is", "your", "name", "my", "name", "is" }; var obj = from 阅读全文
posted @ 2013-04-24 17:33 赶路人之刚出发 阅读(117) 评论(0) 推荐(0) 编辑
yield return 和 Func
摘要:yield return 用以生成IEnumerable类型的结果集,如下例所示,当第15行之行时,函数MyWhere并不会执行,而当第18行之行时会从第5行开始执行,在找到第一个偶数2时,函数MyWhere返回,执行第18行打印数字2,然后再调用第5行找到第二个偶数4,MyWhere又返回,继续执行第18行打印数字4。当执行到第22行时,函数MyWhere又会重新一次一次的执行。MyWhere是为IEnumerable<T>类型定义的一个扩展方法,比如List<int>就是实现了IEnumerable的泛型方法,即可自动调用MyWhere这个扩展方法。Func< 阅读全文
posted @ 2013-04-24 17:17 赶路人之刚出发 阅读(199) 评论(0) 推荐(0) 编辑
Lamda表达式
摘要:Lamda表达式:delegate int MyAdd(int i); delegate int Dosome(); static void Main(string[] args) { MyAdd myAdd; //隐试声明一个参数,表达式方法体 myAdd= x => x + 1; //显示声明一个参数,表达式方法体 myAdd = (int x) => x + 1; //显示声明一个参数,多语句方法体 ... 阅读全文
posted @ 2013-04-24 16:44 赶路人之刚出发 阅读(549) 评论(0) 推荐(0) 编辑
IDisposable
摘要:.net中所有托管资源均有GC自动回收,那非托管资源怎么办呢?IDisposable接口就是设计用来显示释放非托管资源,如果是直接调用dispose方法,则无需再经由finalizer方法去调用this.Dispose(false)去释放托管资源,所以需在Dispose()方法中加上GC.SuppressFinalize(this);以提醒系统无需再调用析构函数,所有托管、非托管资源均会在Dispose(True)方法中释放,否则仍由Finzlizer方法调用Dispose(false)方法以便释放非托管资源,托管资源由GC直接回收 public class MyBaseResourceMa. 阅读全文
posted @ 2013-04-19 11:12 赶路人之刚出发 阅读(483) 评论(0) 推荐(0) 编辑
匿名类型与扩展方法
摘要:匿名类型匿名类型就是没有名字的类型。在C#3.0中允许我们在程序中声明一个临时的类型来存储数据,例如:var noname = new { name = "Jerry", age = 10 };编译器编译后的反编译出来的代码为:View Code [DebuggerDisplay(@"\{ name = {name}, age = {age} }", Type="<Anonymous Type>"), CompilerGenerated]internal sealed class <>f__AnonymousT 阅读全文
posted @ 2013-04-11 17:15 赶路人之刚出发 阅读(291) 评论(0) 推荐(0) 编辑
对象初始化器和集合初始化器
摘要:对象初始化器和集合初始化器,类似自动属性,一种省事的写法,参见下例绿色部分:1 namespace Demo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //以前我们可能这么写 8 //对象 9 Person p1 = new Person();10 p1.Name = "Joey";11 p1.Age = 25;12 /... 阅读全文
posted @ 2013-04-11 16:27 赶路人之刚出发 阅读(192) 评论(0) 推荐(0) 编辑
C#自动属性
摘要:C#2.0中为类定义一个没有复杂读取、写入逻辑的属性,比如定义一个Age属性如下: private int age; public int Age { get { return age; } set { age = value; } }那么在C#3.0中就... 阅读全文
posted @ 2013-04-11 16:16 赶路人之刚出发 阅读(216) 评论(1) 推荐(0) 编辑
.net random伪随机数
摘要:.net中的Randome类可以用于获取随机数,但并非真正意义上的随机,缺点有二:当种子相同时,生成的随机数列一定是相同的,默认用的是当前系统启动后的毫秒数为种子;生成的随机数列很有可能有重复,也就是所有随机数出现的概率并不完全相同;比如:View Code Random mr = new Random(10); for (int s = 0; s < 10; s++) { Console.WriteLine(mr.Next(10)); } Console.WriteLine(... 阅读全文
posted @ 2013-04-11 15:31 赶路人之刚出发 阅读(654) 评论(0) 推荐(0) 编辑
依赖注入dependency injection
摘要:首先说基于面向对象的以下两个设计原则,不能把所有事情封装到一个类中:OCP原则,即开放关闭原则,指设计应该对扩展开放,对修改关闭。策略模式,英文名Strategy Pattern,指定义算法族,分别封装起来,让他们之间可以相互替换,此模式使得算法的变化独立于客户而应该创建客户类和服务类,客户类将引用服务类以接受具体的服务,而服务类可能有多种,所以客户类中最好引用的是众多服务类的一个接口类型的实例,通过接口实例实现具体服务方法的调用。该接口实例可以通过以下三种方法实现在客户类中的实例化(依赖注入):Setter模式通过一个客户类中的一个带参的set方法将服务类实例化后传入优点是灵活,客户类实例化 阅读全文
posted @ 2013-04-10 18:06 赶路人之刚出发 阅读(318) 评论(0) 推荐(0) 编辑
AutoResetEvent实现单并发控制
摘要:AutoResetEvent是EventWaitHandle的一个简单包装,内部没有额外的任何逻辑。它最大的特点就是,调用了Set方法将事件设为true之后,其中一个等待线程得到执行后,它会自动调用Reset方法,将事件信号设为false,以阻塞其它的线程。相当于放一个线程进来,门自动就关了(自动门)。例子,使用AutoResetEvent实现一个简单的线程同步锁。 1 private class SimpleWaitLock : IDisposable 2 { 3 //初始化一定要是true,否则,第一个调用Enter方法的线程会被阻塞 4 ... 阅读全文
posted @ 2013-04-10 16:31 赶路人之刚出发 阅读(278) 评论(0) 推荐(0) 编辑
信号量(semaphore)支持 多并发(n>=1)同步锁
摘要:信号量(semaphore)是内核维护的一个Int32的变量。信号量为0时,在信号量上等待的线程会阻塞;信号量大于0时,就解除阻塞。主要方法:Release():就是一个加1的操作Release(int32 releasecount):就是一个加releasecount的操作。初始化semaphore时,可以指定最大和最小信号量的值。用Sempphore实现同样功能的同步锁,如下为一个只允许1个并发入口(即1次只能有一个线程访问)的示例: 1 public class Program 2 { 3 private class SimpleWaitLock : IDisp... 阅读全文
posted @ 2013-04-10 16:05 赶路人之刚出发 阅读(456) 评论(0) 推荐(0) 编辑
利用Mutex控制程序唯一实例
摘要:Mutex可以实现跨进程的同步,当需要控制应用程序只有一个进程实例时,可通过判断相同名字的Mutex资源是否已存在来判断程序是否已经启动。示例如下: 1 static void Main() 2 { 3 bool createdNew=false; 4 Mutex mutex=new Mutex(true,"consoleapplication1",out createdNew); 5 if (!createdNew) 6 { 7 ... 阅读全文
posted @ 2013-04-10 15:36 赶路人之刚出发 阅读(415) 评论(0) 推荐(0) 编辑
Thread.Join
摘要:thread.join 阅读全文
posted @ 2013-04-10 15:24 赶路人之刚出发 阅读(319) 评论(0) 推荐(0) 编辑
聚簇索引(Clustered Index)和非聚簇索引 (Non- Clustered Index)
摘要:索引的重要性数据库性能优化中索引绝对是一个重量级的因素,可以说,索引使用不当,其它优化措施将毫无意义。聚簇索引(Clustered Index)和非聚簇索引(Non- Clustered Index)最通俗的解释是:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的索引顺序与数据物理排列顺序无关。举例来说,你翻到新华字典的汉字“爬”那一页就是P开头的部分,这就是物理存储顺序(聚簇索引);而不用你到目录,找到汉字“爬”所在的页码,然后根据页码找到这个字(非聚簇索引)。 阅读全文
posted @ 2013-04-10 14:25 赶路人之刚出发 阅读(199) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示