1:
2: 1.1泛型
3:
4: 目标:解决参数类型转换效率,利用泛型可以提高效率
5: using System;
6:
7: namespace DemoGeneric1
8: { 9: /// <summary>
10: /// 泛型类
11: /// </summary>
12: public class GenericClass<T>
13: { 14: /// <summary>
15: /// 泛型类型的字段
16: /// </summary>
17: private T value;
18:
19: /// <summary>
20: /// 泛型类型的属性
21: /// </summary>
22: public T Value
23: { 24: get
25: { 26: return value;
27: }
28: }
29:
30: /// <summary>
31: /// 带泛型参数的函数
32: /// </summary>
33: /// <param name="input"></param>
34: public void Add(T input)
35: { 36: this.value = input;
37: }
38: }
39:
40: class Program
41: { 42: static void Main(string[] args)
43: { 44: //使用字符串类型
45: GenericClass<string> str = new GenericClass<string>();
46: str.Add("字符串测试"); 47: Console.WriteLine(string.Format("Value 类型:{0}", str.Value.GetType().Name)); 48: Console.WriteLine(string.Format("Value:{0}", str.Value)); 49:
50: Console.WriteLine("******************************"); 51:
52: //使用 int 类型
53: GenericClass<int> intc = new GenericClass<int>();
54: intc.Add(123456);
55: Console.WriteLine(string.Format("Value 类型:{0}", intc.Value.GetType().Name)); 56: Console.WriteLine(string.Format("Value:{0}", intc.Value)); 57:
58:
59: Console.ReadKey();
60: }
61: }
62: }
63:
64: 1.2 Arraylist 和List<T>
65:
66: using System;
67: using System.Collections.Generic;
68: using System.Collections;
69:
70: namespace DemoGeneric2
71: { 72: class Program
73: { 74: static void Main(string[] args)
75: { 76: ArrayList arr = new ArrayList();
77: List<int> lst = new List<int>();
78:
79: //ArrayList 计时开始
80: DateTime dt = DateTime.Now;
81:
82: //将100万个元素加入ArrayList
83: for (int i = 0; i < 1000000; i++)
84: arr.Add(i);
85:
86: //ArrayList 计时段
87: TimeSpan ts1 = DateTime.Now - dt;
88:
89: //List 计时开始
90: dt = DateTime.Now;
91:
92: //将100万个元素加入List
93: for (int i = 0; i < 1000000; i++)
94: lst.Add(i);
95:
96: //List 计时段
97: TimeSpan ts2 = DateTime.Now - dt;
98:
99:
100: Console.WriteLine(string.Format("ArrayList 耗时:{0} ms", ts1.Milliseconds)); 101: Console.WriteLine(string.Format("List<T> 耗时:{0} ms", ts2.Milliseconds)); 102:
103: Console.ReadKey();
104: }
105: }
106: }
107:
108: 1.3
109:
110: using System;
111:
112: namespace DemoDelegate1
113: { 114: /// <summary>
115: /// 定义一个没有返回类型的委托
116: /// </summary>
117: delegate void myDelgage(string s);
118:
119: /// <summary>
120: /// 定义一个有返回类型的委托
121: /// </summary>
122: delegate string myDelgageString(string s, bool man);
123:
124: class Program
125: { 126: /// <summary>
127: /// 没有返回的方法
128: /// </summary>
129: static void Show1(string s)
130: { 131: Console.WriteLine(string.Format(" 你好, {0}!", s)); 132: }
133: static void Show2(string s)
134: { 135: Console.WriteLine(string.Format(" 早上好, {0}!", s)); 136: }
137: static void Show3(string s)
138: { 139: Console.WriteLine(string.Format(" 晚上好, {0}!", s)); 140: }
141:
142: /// <summary>
143: /// 返回字符串的方法
144: /// </summary>
145: static string AddTitle(string s, bool man)
146: { 147: if (man)
148: return string.Format(" 你好, {0} 先生", s); 149: else
150: return string.Format(" 你好, {0} 女士", s); 151: }
152:
153: static void Main(string[] args)
154: { 155: string name = "林晚荣";
156: string name2 = "徐芷晴";
157:
158: //.NET 1.1 的委托实例化
159: myDelgage del1 = new myDelgage(Show1);
160: Console.WriteLine(" .NET 1.1 的委托调用"); 161: del1(name);
162: Console.WriteLine("***********************************"); 163:
164: //.NET 2.0 以上的委托实例化
165: myDelgage del2 = Show1;
166: Console.WriteLine(" .NET 2.0 以上的委托调用"); 167: del2(name);
168: Console.WriteLine("***********************************"); 169:
170: //多路委托绑定
171: Console.WriteLine(" 多路委托绑定调用"); 172: del2 += Show2;
173: del2 += Show3;
174: del2(name);
175: Console.WriteLine("\n 合并掉Show1委托调用"); 176: del2 -= Show1;
177: del2(name);
178: Console.WriteLine("***********************************"); 179:
180: //返回类型的委托
181: myDelgageString del3 = AddTitle;
182:
183: Console.WriteLine(" 返回类型的委托调用"); 184: Console.WriteLine(del3(name, true));
185: Console.WriteLine(del3(name2, false));
186:
187: Console.ReadKey();
188: }
189:
190: public event myDelgage myEvet;
191: }
192: }
193: 1.4 自定义事件及其事件数据类和利用代理跨线程的数据传递
194: Public event EventHandler myEvent;
195:
196: namespace DemoDelegate2
197: { 198: partial class EventDemo
199: { 200: /// <summary>
201: /// 必需的设计器变量。
202: /// </summary>
203: private System.ComponentModel.IContainer components = null;
204:
205: /// <summary>
206: /// 清理所有正在使用的资源。
207: /// </summary>
208: /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
209: protected override void Dispose(bool disposing)
210: { 211: if (disposing && (components != null))
212: { 213: components.Dispose();
214: }
215: base.Dispose(disposing);
216: }
217:
218: #region Windows 窗体设计器生成的代码
219:
220: /// <summary>
221: /// 设计器支持所需的方法 - 不要
222: /// 使用代码编辑器修改此方法的内容。
223: /// </summary>
224: private void InitializeComponent()
225: { 226: this.but = new System.Windows.Forms.Button();
227: this.progressBar = new System.Windows.Forms.ProgressBar();
228: this.SuspendLayout();
229: //
230: // but
231: //
232: this.but.Location = new System.Drawing.Point(172, 35);
233: this.but.Name = "but";
234: this.but.Size = new System.Drawing.Size(75, 23);
235: this.but.TabIndex = 0;
236: this.but.Text = "开始";
237: this.but.UseVisualStyleBackColor = true;
238: this.but.Click += new System.EventHandler(this.but_Click);
239: //
240: // progressBar
241: //
242: this.progressBar.Location = new System.Drawing.Point(12, 95);
243: this.progressBar.Name = "progressBar";
244: this.progressBar.Size = new System.Drawing.Size(235, 23);
245: this.progressBar.TabIndex = 1;
246: //
247: // EventDemo
248: //
249: this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
250: this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
251: this.ClientSize = new System.Drawing.Size(259, 149);
252: this.Controls.Add(this.progressBar);
253: this.Controls.Add(this.but);
254: this.Name = "EventDemo";
255: this.Text = "自定义事件演示";
256: this.ResumeLayout(false);
257:
258: }
259:
260: #endregion
261:
262: private System.Windows.Forms.Button but;
263: private System.Windows.Forms.ProgressBar progressBar;
264: }
265: }
266:
267: namespace DemoDelegate2
268: { 269: partial class EventDemo
270: { 271: /// <summary>
272: /// 必需的设计器变量。
273: /// </summary>
274: private System.ComponentModel.IContainer components = null;
275:
276: /// <summary>
277: /// 清理所有正在使用的资源。
278: /// </summary>
279: /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
280: protected override void Dispose(bool disposing)
281: { 282: if (disposing && (components != null))
283: { 284: components.Dispose();
285: }
286: base.Dispose(disposing);
287: }
288:
289: #region Windows 窗体设计器生成的代码
290:
291: /// <summary>
292: /// 设计器支持所需的方法 - 不要
293: /// 使用代码编辑器修改此方法的内容。
294: /// </summary>
295: private void InitializeComponent()
296: { 297: this.but = new System.Windows.Forms.Button();
298: this.progressBar = new System.Windows.Forms.ProgressBar();
299: this.SuspendLayout();
300: //
301: // but
302: //
303: this.but.Location = new System.Drawing.Point(172, 35);
304: this.but.Name = "but";
305: this.but.Size = new System.Drawing.Size(75, 23);
306: this.but.TabIndex = 0;
307: this.but.Text = "开始";
308: this.but.UseVisualStyleBackColor = true;
309: this.but.Click += new System.EventHandler(this.but_Click);
310: //
311: // progressBar
312: //
313: this.progressBar.Location = new System.Drawing.Point(12, 95);
314: this.progressBar.Name = "progressBar";
315: this.progressBar.Size = new System.Drawing.Size(235, 23);
316: this.progressBar.TabIndex = 1;
317: //
318: // EventDemo
319: //
320: this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
321: this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
322: this.ClientSize = new System.Drawing.Size(259, 149);
323: this.Controls.Add(this.progressBar);
324: this.Controls.Add(this.but);
325: this.Name = "EventDemo";
326: this.Text = "自定义事件演示";
327: this.ResumeLayout(false);
328:
329: }
330:
331: #endregion
332:
333: private System.Windows.Forms.Button but;
334: private System.Windows.Forms.ProgressBar progressBar;
335: }
336: }
337:
338:
339: using System;
340:
341: namespace DemoDelegate2
342: { 343: /// <summary>
344: /// 自定义的事件数据类
345: /// </summary>
346: public class MyEnentArgs : EventArgs
347: { 348: /// <summary>
349: /// 需要传递的数据
350: /// </summary>
351: public int Number { get; private set; } 352:
353: public MyEnentArgs(int n)
354: { 355: this.Number = n;
356: }
357: }
358:
359: }
360:
361: using System;
362: using System.Collections.Generic;
363: using System.Linq;
364: using System.Windows.Forms;
365:
366: namespace DemoDelegate2
367: { 368: static class Program
369: { 370: /// <summary>
371: /// 应用程序的主入口点。
372: /// </summary>
373: [STAThread]
374: static void Main()
375: { 376: Application.EnableVisualStyles();
377: Application.SetCompatibleTextRenderingDefault(false);
378: Application.Run(new EventDemo());
379: }
380: }
381: }
382:
383:
384: using System;
385: using System.Windows.Forms;
386: using System.Threading;
387:
388: namespace DemoDelegate2
389: { 390: public partial class EventDemo : Form
391: { 392: /// <summary>
393: /// 定义事件
394: /// </summary>
395: public event EventHandler<MyEnentArgs> Half;
396:
397: /// <summary>
398: /// 定义一个用于更新界面的委托
399: /// </summary>
400: /// <param name="?"></param>
401: private delegate void UpdateCtlDelegate(int data, bool evt, bool over);
402:
403: public EventDemo()
404: { 405: InitializeComponent();
406:
407: //挂载事件处理函数
408: this.Half += new EventHandler<MyEnentArgs>(EventDemo_Half);
409: }
410:
411: /// <summary>
412: /// 自定义事件处理函数
413: /// </summary>
414: void EventDemo_Half(object sender, MyEnentArgs e)
415: { 416: MessageBox.Show(string.Format("参数数据:{0}", e.Number), "事件成功被引发"); 417: }
418:
419: /// <summary>
420: /// 开始按钮Click事件处理
421: /// </summary>
422: private void but_Click(object sender, EventArgs e)
423: { 424: this.but.Enabled = false;
425: //启动工作线程
426: Thread th = new Thread(new ThreadStart(progress));
427: th.IsBackground = true;
428: th.Start();
429: }
430:
431: /// <summary>
432: /// 界面更新及事件引发
433: /// </summary>
434: private void update(int data, bool evt, bool over)
435: { 436: //检测是否需要返回界面线程
437: if (this.InvokeRequired)
438: { 439: //通过委托返回界面线程
440: this.BeginInvoke(new UpdateCtlDelegate(update), new object[] { data, evt, over }); 441: return;
442: }
443:
444: //循环结束修改Button显示
445: if (over)
446: { 447: this.but.Enabled = true;
448: return;
449: }
450:
451: if (evt)
452: { 453: //引发事件
454: this.Half(this, new MyEnentArgs(data));
455: }
456: else
457: { 458: //更新进度条
459: this.progressBar.Value = data;
460: }
461: }
462:
463: /// <summary>
464: /// 工作线程处理方法
465: /// </summary>
466: private void progress()
467: { 468: for (int i = 0; i < 100; i++)
469: { 470: this.update(i, false, false);
471:
472: if (i == 50)
473: { 474: if (this.Half != null)
475: this.update(i, true, false);
476: }
477:
478: //延时
479: System.Threading.Thread.Sleep(10);
480: }
481:
482: this.update(0, false, true);
483: }
484: }
485: }
486:
487: 5 迭代器与yield 关键字
488: yield 关键字在迭代器中,用于向枚举对象返回元素值或发出迭代结束信号
489:
490: yield return <expression>
491: yield break
492:
493: using System;
494:
495: namespace DemoInitializer1
496: { 497: class Girlfriend
498: { 499: public string Name { get; set; } 500: public int Age { get; set; } 501: }
502:
503: class Boy
504: { 505: public string Name { get; set; } 506: public int Age { get; set; } 507: public Girlfriend Girl{ get; set; } 508: }
509:
510: class Program
511: { 512: static void Main(string[] args)
513: { 514: //用对象初始化器创建对象
515: Girlfriend gf1 = new Girlfriend { Name = "秦仙儿", }; 516:
517: //等价于
518: Girlfriend gf2 = new Girlfriend();
519: gf2.Name = "萧玉若";
520: gf2.Age = 21;
521:
522: //用嵌套的对象初始化器创建对象
523: Boy boy1 = new Boy { Name = "林晚荣", Age = 24, Girl = new Girlfriend { Name = "肖青漩", Age = 20 } }; 524:
525: //等价于
526: Boy boy2 = new Boy();
527: Girlfriend gf3 = new Girlfriend();
528:
529: gf3.Name = "董巧巧";
530: gf3.Age = 18;
531: boy2.Name = "林三";
532: boy2.Age = 24;
533: boy2.Girl = gf3;
534:
535: Console.WriteLine("gf1 初始化的类型:" + gf1.GetType().Name); 536: Console.WriteLine("boy1 初始化的类型:" + boy1.GetType().Name); 537:
538: Console.ReadKey();
539: }
540: }
541: }
542:
543:
544: 7 、隐式类型的局部变量 var
545: var 类型的确定由初始化语句的右侧的表达式推断出来的
546:
547:
548: using System;
549: using System.Collections.Generic;
550:
551: namespace DemoVar
552: { 553: class Program
554: { 555: static void Main(string[] args)
556: { 557: var str = "测试字符串";
558: var i = 123456;
559: var lst = new List<string>();
560: var arr = new string[] { "大华军师", "金刀可汗", "圣坊仙子", "金陵才女" }; 561:
562: Console.WriteLine(string.Format("变量 str 的数据类型:{0}", str.GetType().Name)); 563: Console.WriteLine(string.Format("变量 i 的数据类型:{0}", i.GetType().Name)); 564: Console.WriteLine(string.Format("变量 lst 的数据类型:{0}", lst.GetType().Name)); 565: Console.WriteLine(string.Format("变量 arr 的数据类型:{0}", arr.GetType().Name)); 566:
567: Console.ReadKey();
568: }
569: }
570: }
571: 变量 str 的数据类型:String
572: 变量 i 的数据类型:Int32
573: 变量 lst 的数据类型:List`1
574: 变量 arr 的数据类型:String[]
575:
576:
577: 8对象和集合初始化器
578:
579: 8.1 对象的初始化
580: using System;
581:
582: namespace DemoInitializer1
583: { 584: class Girlfriend
585: { 586: public string Name { get; set; } 587: public int Age { get; set; } 588: }
589:
590: class Boy
591: { 592: public string Name { get; set; } 593: public int Age { get; set; } 594: public Girlfriend Girl{ get; set; } 595: }
596:
597: class Program
598: { 599: static void Main(string[] args)
600: { 601: //用对象初始化器创建对象
602: Girlfriend gf1 = new Girlfriend { Name = "秦仙儿", }; 603:
604: //等价于
605: Girlfriend gf2 = new Girlfriend();
606: gf2.Name = "萧玉若";
607: gf2.Age = 21;
608:
609: //用嵌套的对象初始化器创建对象
610: Boy boy1 = new Boy { Name = "林晚荣", Age = 24, Girl = new Girlfriend { Name = "肖青漩", Age = 20 } }; 611:
612: //等价于
613: Boy boy2 = new Boy();
614: Girlfriend gf3 = new Girlfriend();
615:
616: gf3.Name = "董巧巧";
617: gf3.Age = 18;
618: boy2.Name = "林三";
619: boy2.Age = 24;
620: boy2.Girl = gf3;
621:
622: Console.WriteLine("gf1 初始化的类型:" + gf1.GetType().Name); 623: Console.WriteLine("boy1 初始化的类型:" + boy1.GetType().Name); 624:
625: Console.ReadKey();
626: }
627: }
628: }
629:
630:
631: 8.2 集合初始化化
632:
633: using System;
634: using System.Collections.Generic;
635:
636: namespace DemoInitializer2
637: { 638: /// <summary>
639: /// 演示对象
640: /// </summary>
641: class Girlfriend
642: { 643: public string Name { get; set; } 644: public int Age { get; set; } 645: }
646:
647: /// <summary>
648: /// 演示对象
649: /// </summary>
650: class Boy
651: { 652: public string Name { get; set; } 653: public int Age { get; set; } 654:
655: /// <summary>
656: /// 集合属性
657: /// </summary>
658: public List<Girlfriend> Girls { get; set;} 659: }
660:
661:
662: class Program
663: { 664: static void Main(string[] args)
665: { 666: //用集合初始化器创建集合
667: List<string> gfs1 = new List<string> { "肖青漩", "董巧巧", "萧玉霜" }; 668:
669: //等价于
670: List<string> gfs2 = new List<string>();
671: gfs2.Add("肖青漩"); 672: gfs2.Add("董巧巧"); 673: gfs2.Add("萧玉霜"); 674:
675: //对象集合初始化器复合使用
676: Boy boy = new Boy { Name = "林晚荣", Age = 24, 677: Girls = new List<Girlfriend>
678: { 679: new Girlfriend { Name = "肖青漩", Age = 23 }, 680: new Girlfriend { Name = "董巧巧", Age = 18 }, 681: new Girlfriend { Name = "萧玉霜", Age = 16 } 682: }
683: };
684:
685:
686: Console.ReadKey();
687:
688: }
689: }
690: }
691:
692: 2.28 匿名类型
693: 使用new 运算符和对象初始值设定项来创建。
694:
695:
696: using System;
697: using System.Collections.Generic;
698: using System.Linq;
699:
700: namespace DemoAnonymousType
701: { 702: class Program
703: { 704: static void Main(string[] args)
705: { 706: ///创建匿名类型
707: var anonymous1 = new { Name = "安碧如", Title = "苗族圣姑", Age = 36 }; 708: var anonymous2 = new { Name = "宁雨昔", Title = "圣坊仙子", Age = 37 }; 709:
710: List<string> lst = new List<string> { "高丽公主", "大华军师", "霓裳公主" }; 711:
712: Console.WriteLine(string.Format("anonymous1的类型:{0}", anonymous1.GetType().Name)); 713: Console.WriteLine(string.Format("{0} {1} {2}", anonymous1.Name, anonymous1.Title, anonymous1.Age)); 714:
715: Console.WriteLine(string.Format("anonymous2的类型:{0}", anonymous2.GetType().Name)); 716: Console.WriteLine(string.Format("{0} {1} {2}", anonymous2.Name, anonymous2.Title, anonymous2.Age)); 717:
718: Console.WriteLine("\n*******************************************\n"); 719:
720: //LINQ select 子句中创建匿名类型
721: var query = from n in lst
722: where n.IndexOf("公主") > -1 723: select new { Name = "查询元素", Title = n }; 724:
725: foreach (var item in query)
726: { 727: Console.WriteLine(string.Format("元素的类型:{0}", item.GetType().Name)); 728: Console.WriteLine(string.Format("{0} {1}", item.Name, item.Title)); 729: }
730:
731: Console.ReadKey();
732: }
733: }
734: }
735:
736: 10 扩展方法
737: using System;
738:
739: namespace DemoExtensionMethods
740: { 741: public class Program
742: { 743: static void Main(string[] args)
744: { 745: string subb = "[a]http://www.baidu.com[/a]";
746:
747: Console.WriteLine(subb.UbbToHtmlLink());
748:
749: Console.WriteLine("\n"); 750:
751: int i = 5;
752:
753: Console.WriteLine(string.Format("检测 i 是否为偶数:{0}",i.IsEven())); 754:
755: Console.WriteLine("\n"); 756:
757: Program p = new Program();
758:
759: p.ExtensionShow();
760:
761: Console.ReadKey();
762: }
763:
764: }
765: }
766:
767: 12创建匿名方法
768:
769: using System;
770: using System.Collections.Generic;
771: using System.Linq;
772: using System.Text;
773:
774: namespace DemoAnony
775: { 776: class Program
777: { 778: delegate void DemoDelegate();
779: static void Main(string[] args)
780: { 781: DemoDelegate dele = delegate { Console.WriteLine("From the anonymousMethod"); }; 782: dele();
783: Console.ReadKey();
784:
785: }
786: }
787: }
788: 13、创建Lambda表达式
789:
790: using System;
791: using System.Linq.Expressions;
792:
793: namespace DemoLambda1
794: { 795: class Program
796: { 797: delegate string MyDelegate(string title, string name);
798:
799: //delegate T MyDelegate2<T>(T a, T b);
800:
801: static void Main(string[] args)
802: { 803: //定义Lambda表达式
804: MyDelegate dele = (title, name) => string.Format("{0} {1}", title, name); 805:
806: Console.WriteLine("调用Lambda表达式\n"); 807: //调用Lambda表达式
808: Console.WriteLine(dele("出云公主", "肖青漩")); 809: Console.WriteLine(dele("乖巧人儿", "董巧巧")); 810: Console.WriteLine(dele("萧家二小姐", "萧玉霜")); 811:
812: Console.WriteLine("\n*******************\n"); 813:
814: string tmp = "我是Lambda语句外的变量";
815:
816: //定义Lambda语句
817: MyDelegate dele2 = (title, name) =>
818: { 819: Console.WriteLine("从Lambda语句体中输出"); 820: Console.WriteLine(string.Format("输出外部变量tmp:{0}", tmp)); 821: string s;
822: s = string.Format("{0} {1} 小姐", title, name); 823:
824: return s;
825: };
826:
827: Console.WriteLine("调用Lambda语句\n"); 828: //调用Lambda表达式
829: Console.WriteLine(dele2("霓裳公主", "秦仙儿")); 830:
831:
832: Console.ReadKey();
833: }
834: }
835: }
836:
837: 14 Lambda 表达式树
838: using System;
839: using System.Linq.Expressions;
840:
841: namespace DemoLambda2
842: { 843: class Program
844: { 845: static void Main(string[] args)
846: { 847: //定义Lambd表达式目录树
848: Expression<Func<int, bool>> tree = n => n > 168;
849:
850: //分解表达式
851: BinaryExpression body = (BinaryExpression)tree.Body;
852: ParameterExpression left = (ParameterExpression)body.Left;
853: ConstantExpression right = (ConstantExpression)body.Right;
854:
855: //分解结果
856: Console.WriteLine("分解结果: {0} {1} {2}\n", 857: left.Name, body.NodeType, right.Value);
858:
859: //编译目录树
860: Func<int, bool> t = tree.Compile();
861:
862:
863: //执行目录树
864: Console.WriteLine(string.Format("1000 是否大于 168 :{0}", t(1000))); 865:
866:
867: Console.ReadKey();
868: }
869: }
870: }
871:
872: 15 C#高亮编辑及编译运行器
873:
874: using System;
875: using System.Windows.Forms;
876:
877: namespace DemoCSharpEditor
878: { 879: public partial class Editor : Form
880: { 881: /// <summary>
882: /// 控制器
883: /// </summary>
884: private EditorController ec;
885:
886: public Editor()
887: { 888: InitializeComponent();
889: //初始化控制器
890: ec = new EditorController(this.richt,this.txtlog);
891: }
892:
893: private void 运行ToolStripMenuItem_Click(object sender, EventArgs e)
894: { 895: ec.Compile();
896: }
897:
898: private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
899: { 900: this.Close();
901: }
902:
903: private void Editor_Load(object sender, EventArgs e)
904: { 905:
906: }
907: }
908: }
909: namespace DemoCSharpEditor
910: { 911: partial class Editor
912: { 913: /// <summary>
914: /// 必需的设计器变量。
915: /// </summary>
916: private System.ComponentModel.IContainer components = null;
917:
918: /// <summary>
919: /// 清理所有正在使用的资源。
920: /// </summary>
921: /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
922: protected override void Dispose(bool disposing)
923: { 924: if (disposing && (components != null))
925: { 926: components.Dispose();
927: }
928: base.Dispose(disposing);
929: }
930:
931: #region Windows 窗体设计器生成的代码
932:
933: /// <summary>
934: /// 设计器支持所需的方法 - 不要
935: /// 使用代码编辑器修改此方法的内容。
936: /// </summary>
937: private void InitializeComponent()
938: { 939: this.mainmenu = new System.Windows.Forms.MenuStrip();
940: this.文件FToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
941: this.打开OToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
942: this.保存SToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
943: this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
944: this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
945: this.运行RToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
946: this.运行ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
947: this.richt = new System.Windows.Forms.RichTextBox();
948: this.txtlog = new System.Windows.Forms.TextBox();
949: this.mainmenu.SuspendLayout();
950: this.SuspendLayout();
951: //
952: // mainmenu
953: //
954: this.mainmenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 955: this.文件FToolStripMenuItem,
956: this.运行RToolStripMenuItem});
957: this.mainmenu.Location = new System.Drawing.Point(0, 0);
958: this.mainmenu.Name = "mainmenu";
959: this.mainmenu.Padding = new System.Windows.Forms.Padding(8, 2, 0, 2);
960: this.mainmenu.Size = new System.Drawing.Size(408, 28);
961: this.mainmenu.TabIndex = 0;
962: this.mainmenu.Text = "menuStrip1";
963: //
964: // 文件FToolStripMenuItem
965: //
966: this.文件FToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { 967: this.打开OToolStripMenuItem,
968: this.保存SToolStripMenuItem,
969: this.toolStripMenuItem1,
970: this.退出ToolStripMenuItem});
971: this.文件FToolStripMenuItem.Name = "文件FToolStripMenuItem";
972: this.文件FToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
973: this.文件FToolStripMenuItem.Size = new System.Drawing.Size(69, 24);
974: this.文件FToolStripMenuItem.Text = "文件(&F)";
975: //
976: // 打开OToolStripMenuItem
977: //
978: this.打开OToolStripMenuItem.Name = "打开OToolStripMenuItem";
979: this.打开OToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O)));
980: this.打开OToolStripMenuItem.Size = new System.Drawing.Size(188, 24);
981: this.打开OToolStripMenuItem.Text = "打开(&O)";
982: //
983: // 保存SToolStripMenuItem
984: //
985: this.保存SToolStripMenuItem.Name = "保存SToolStripMenuItem";
986: this.保存SToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S)));
987: this.保存SToolStripMenuItem.Size = new System.Drawing.Size(188, 24);
988: this.保存SToolStripMenuItem.Text = "保存(&S)";
989: //
990: // toolStripMenuItem1
991: //
992: this.toolStripMenuItem1.Name = "toolStripMenuItem1";
993: this.toolStripMenuItem1.Size = new System.Drawing.Size(185, 6);
994: //
995: // 退出ToolStripMenuItem
996: //
997: this.退出ToolStripMenuItem.Name = "退出ToolStripMenuItem";
998: this.退出ToolStripMenuItem.Size = new System.Drawing.Size(188, 24);
999: this.退出ToolStripMenuItem.Text = "退出(&Q)";
1000: this.退出ToolStripMenuItem.Click += new System.EventHandler(this.退出ToolStripMenuItem_Click);
1001: //
1002: // 运行RToolStripMenuItem
1003: //
1004: this.运行RToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {1005: this.运行ToolStripMenuItem});
1006: this.运行RToolStripMenuItem.Name = "运行RToolStripMenuItem";
1007: this.运行RToolStripMenuItem.Size = new System.Drawing.Size(71, 24);
1008: this.运行RToolStripMenuItem.Text = "运行(&R)";
1009: //
1010: // 运行ToolStripMenuItem
1011: //
1012: this.运行ToolStripMenuItem.Name = "运行ToolStripMenuItem";
1013: this.运行ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R)));
1014: this.运行ToolStripMenuItem.Size = new System.Drawing.Size(164, 24);
1015: this.运行ToolStripMenuItem.Text = "运行";
1016: this.运行ToolStripMenuItem.Click += new System.EventHandler(this.运行ToolStripMenuItem_Click);
1017: //
1018: // richt
1019: //
1020: this.richt.AcceptsTab = true;
1021: this.richt.Dock = System.Windows.Forms.DockStyle.Fill;
1022: this.richt.Font = new System.Drawing.Font("新宋体", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));1023: this.richt.Location = new System.Drawing.Point(0, 28);
1024: this.richt.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
1025: this.richt.Name = "richt";
1026: this.richt.Size = new System.Drawing.Size(408, 183);
1027: this.richt.TabIndex = 1;
1028: this.richt.Text = "";
1029: //
1030: // txtlog
1031: //
1032: this.txtlog.Dock = System.Windows.Forms.DockStyle.Bottom;
1033: this.txtlog.Location = new System.Drawing.Point(0, 211);
1034: this.txtlog.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
1035: this.txtlog.Multiline = true;
1036: this.txtlog.Name = "txtlog";
1037: this.txtlog.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
1038: this.txtlog.Size = new System.Drawing.Size(408, 109);
1039: this.txtlog.TabIndex = 2;
1040: this.txtlog.WordWrap = false;
1041: //
1042: // Editor
1043: //
1044: this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
1045: this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
1046: this.ClientSize = new System.Drawing.Size(408, 320);
1047: this.Controls.Add(this.richt);
1048: this.Controls.Add(this.txtlog);
1049: this.Controls.Add(this.mainmenu);
1050: this.KeyPreview = true;
1051: this.MainMenuStrip = this.mainmenu;
1052: this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
1053: this.Name = "Editor";
1054: this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
1055: this.Text = "C Sharp 代码编辑器";
1056: this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
1057: this.Load += new System.EventHandler(this.Editor_Load);
1058: this.mainmenu.ResumeLayout(false);
1059: this.mainmenu.PerformLayout();
1060: this.ResumeLayout(false);
1061: this.PerformLayout();
1062:
1063: }
1064:
1065: #endregion
1066:
1067: private System.Windows.Forms.MenuStrip mainmenu;
1068: private System.Windows.Forms.ToolStripMenuItem 文件FToolStripMenuItem;
1069: private System.Windows.Forms.ToolStripMenuItem 打开OToolStripMenuItem;
1070: private System.Windows.Forms.ToolStripMenuItem 保存SToolStripMenuItem;
1071: private System.Windows.Forms.ToolStripSeparator toolStripMenuItem1;
1072: private System.Windows.Forms.ToolStripMenuItem 退出ToolStripMenuItem;
1073: private System.Windows.Forms.ToolStripMenuItem 运行RToolStripMenuItem;
1074: private System.Windows.Forms.ToolStripMenuItem 运行ToolStripMenuItem;
1075: private System.Windows.Forms.RichTextBox richt;
1076: private System.Windows.Forms.TextBox txtlog;
1077: }
1078: }
1079:
1080: using System;
1081: using System.Collections.Generic;
1082: using System.Linq;
1083: using System.Windows.Forms;
1084: using System.IO;
1085: using System.Drawing;
1086: using System.CodeDom.Compiler;
1087: using Microsoft.CSharp;
1088: using System.Reflection;
1089:
1090: namespace DemoCSharpEditor
1091: {1092: /// <summary>
1093: /// 控制器
1094: /// </summary>
1095: public class EditorController
1096: {1097: /// <summary>
1098: /// 高亮字颜色
1099: /// </summary>
1100: public Color LightColor { get; set; }1101:
1102: /// <summary>
1103: /// 文本色
1104: /// </summary>
1105: public Color TextColor { get; set; }1106:
1107: /// <summary>
1108: /// RichTextBox 控件引用
1109: /// </summary>
1110: private RichTextBox rich;
1111:
1112: private TextBox loginfo;
1113:
1114: /// <summary>
1115: /// 关键字列表
1116: /// </summary>
1117: private List<string> keywords = new List<string>();
1118:
1119: public EditorController(RichTextBox r, TextBox l)
1120: {1121: if (r == null || l == null)
1122: throw new Exception("控制器,初始化失败。");1123:
1124: this.loginfo = l;
1125: this.rich = r;
1126: this.rich.KeyUp += new KeyEventHandler(rich_KeyUp);
1127: this.LoadKeyWord();
1128:
1129: this.LightColor = Color.Blue;
1130: this.TextColor = this.rich.ForeColor;
1131: }
1132:
1133: void rich_KeyUp(object sender, KeyEventArgs e)
1134: {1135: if (e.KeyValue < 229)
1136: this.LightCurrentKeyWord();
1137: }
1138:
1139: /// <summary>
1140: /// 从文本文件装载关键字列表
1141: /// </summary>
1142: private void LoadKeyWord()
1143: {1144: string sf = "cs.txt";
1145:
1146: if (File.Exists(sf))
1147: {1148: keywords.Clear();
1149: using (StreamReader sr = new StreamReader(sf))
1150: {1151: string sl = sr.ReadLine();
1152: do
1153: {1154: if (sl != null)
1155: keywords.Add(sl);
1156:
1157: sl = sr.ReadLine();
1158: } while (sl != null);
1159: }
1160: }
1161: }
1162:
1163: /// <summary>
1164: /// 高亮关键字
1165: /// </summary>
1166: private void LightCurrentKeyWord()
1167: {1168: CurrentWord last = this.rich.Text.CursorWord(this.rich.SelectionStart);
1169:
1170: if (last != null)
1171: {1172: var query = from w in this.keywords
1173: where w == last.Word
1174: select w;
1175:
1176: int oldindex = this.rich.SelectionStart;
1177: int oldleng = this.rich.SelectionLength;
1178: this.rich.SelectionStart = last.StartIndex;
1179: this.rich.SelectionLength = last.Length;
1180:
1181: if (query.Count<string>() > 0)
1182: {1183: this.rich.SelectionColor = this.LightColor;
1184: }
1185: else
1186: {1187: this.rich.SelectionColor = this.TextColor;
1188: }
1189:
1190: this.rich.SelectionLength = oldleng;
1191: this.rich.SelectionStart = oldindex;
1192: this.rich.SelectionColor = this.TextColor;
1193: }
1194: }
1195:
1196: /// <summary>
1197: /// 格式化代码
1198: /// </summary>
1199: private string MakeCode()
1200: {1201: string code = @"
1202: using System;
1203: using System.Collections.Generic;
1204: using System.ComponentModel;
1205: using System.Data;
1206: using System.Drawing;
1207: using System.Text;
1208: using System.Windows.Forms;
1209: namespace DemoTest
1210: {1211: public class Test
1212: {1213: public void TestMethod()
1214: {"1215: + this.rich.Text + @"
1216: }
1217: }
1218: }";
1219: return code;
1220: }
1221:
1222: /// <summary>
1223: /// 编译并运行代码
1224: /// </summary>
1225: public void Compile()
1226: {1227: this.loginfo.Text = "信息:准备编译。\n";
1228: using (CSharpCodeProvider provider = new CSharpCodeProvider())
1229: {1230: string[] refs = { "System.dll", "System.Data.dll", "System.Deployment.dll", "System.Drawing.dll", "System.Windows.Forms.dll", "System.Xml.dll" };1231:
1232: CompilerParameters opt = new CompilerParameters();
1233: opt.ReferencedAssemblies.AddRange(refs);
1234:
1235: CompilerResults res = provider.CompileAssemblyFromSource(opt, this.MakeCode());
1236:
1237: if (res.Errors.Count > 0)
1238: {1239: foreach (CompilerError e in res.Errors)
1240: this.loginfo.AppendText(string.Format("编译错误:{0}\n", e.ErrorText));1241: return;
1242: }
1243:
1244: this.loginfo.AppendText("信息:编译成功,准备运行。\n");1245: try
1246: {1247: Assembly assembly = res.CompiledAssembly;
1248: Type type = assembly.GetType("DemoTest.Test");1249: object obj = Activator.CreateInstance(type);
1250: this.loginfo.AppendText("信息:运行。\n");1251: type.GetMethod("TestMethod").Invoke(obj, null);1252: }
1253: catch (Exception e)
1254: {1255: this.loginfo.AppendText(string.Format("运行错误:{0} \n {1} \n", e.Message, e.StackTrace));1256: }
1257:
1258: this.loginfo.AppendText("完毕。\n");1259: }
1260: }
1261:
1262:
1263: }
1264: }
1265:
1266: using System;
1267: using System.Linq;
1268:
1269: namespace DemoCSharpEditor
1270: {1271: /// <summary>
1272: /// String 扩展
1273: /// </summary>
1274: public static class EditorExtension
1275: {1276: /// <summary>
1277: /// 单词分隔字符数组
1278: /// </summary>
1279: public static char[] SplitChar = { ' ', ',', '.', ';', '\n', '{', '}', '\r', Convert.ToChar(9),'(',')','[',']' };1280:
1281: /// <summary>
1282: /// 检测字符是否分割字符
1283: /// </summary>
1284: public static bool IsSplit(this Char chr)
1285: {1286:
1287: var query = SplitChar.Where(c => c == chr);
1288:
1289: if (query.Count<char>() > 0)
1290: return true;
1291: else
1292: return false;
1293: }
1294:
1295:
1296: /// <summary>
1297: /// 检测字符串最后一个字符是否是分割字符
1298: /// </summary>
1299: public static bool LastCharIsSplit(this string str, int cursorinde)
1300: {1301: if (cursorinde < 1)
1302: return false;
1303:
1304: var sec = from c in SplitChar
1305: where c == str[cursorinde - 1]
1306: select c;
1307:
1308: if (sec.Count<char>() > 0)
1309: return true;
1310: else
1311: return false;
1312: }
1313:
1314: /// <summary>
1315: /// 光标所在的单词
1316: /// </summary>
1317: public static CurrentWord CursorWord(this string str, int cursorindex)
1318: {1319: if (string.IsNullOrEmpty(str))
1320: return null;
1321:
1322: if (cursorindex < 2)
1323: return null;
1324:
1325: int i = str.LastIndexOfAny(SplitChar, cursorindex - 2);
1326: int ed = cursorindex - 2;
1327:
1328: if (ed < 1)
1329: ed = str.Length;
1330:
1331: if (i < 0)
1332: i = 0;
1333: else
1334: i = i + 1;
1335:
1336: if (ed < str.Length)
1337: {1338: //光标不在字符串尾部,向后搜索
1339: ed = str.IndexOfAny(SplitChar, ed);
1340: }
1341:
1342: if (ed < 0)
1343: return null;
1344:
1345: char lastc = str[ed - 1];
1346: if (lastc.IsSplit())
1347: ed = ed - 1;
1348:
1349: ed = ed - i;
1350:
1351: if (ed < 1)
1352: return null;
1353:
1354: return new CurrentWord
1355: {1356: StartIndex = i,
1357: Length = ed,
1358: Word = str.Substring(i, ed)
1359: };
1360: }
1361: }
1362: }
1363: using System;
1364: using System.Collections.Generic;
1365: using System.Linq;
1366: using System.Windows.Forms;
1367:
1368: namespace DemoCSharpEditor
1369: {1370: static class Program
1371: {1372: /// <summary>
1373: /// 应用程序的主入口点。
1374: /// </summary>
1375: [STAThread]
1376: static void Main()
1377: {1378: Application.EnableVisualStyles();
1379: Application.SetCompatibleTextRenderingDefault(false);
1380: Application.Run(new Editor());
1381: }
1382: }
1383: }
1384:
1385: 3.1 LINQ
1386: using System;
1387: using System.Collections.Generic;
1388: using System.Linq;
1389: using System.Text;
1390:
1391: namespace DemoLinq1
1392: {1393: class Program
1394: {1395: static void Main(string[] args)
1396: {1397: string[] values = { "巧巧", "李四", "林三哥", "王五" };1398:
1399: var value = from v in values where v.Length > 2 select v;
1400:
1401: foreach (var n in value)
1402: Console.WriteLine(n);
1403:
1404: Console.ReadKey();
1405: }
1406: }
1407: }
1408:
1409: 3.2 from
1410: using System.Collections.Generic;
1411:
1412: namespace DemoLinq
1413: {1414: /// <summary>
1415: /// 客户信息
1416: /// </summary>
1417: public class GuestInfo
1418: {1419: /// <summary>
1420: /// 姓名
1421: /// </summary>
1422: public string Name { set; get; }1423: /// <summary>
1424: /// 年龄
1425: /// </summary>
1426: public int Age { set; get; }1427:
1428: /// <summary>
1429: /// 电话
1430: /// </summary>
1431: public string Tel { set; get; }1432:
1433: /// <summary>
1434: /// 电话表
1435: /// </summary>
1436: public List<string> TelTable { set; get; }1437:
1438: }
1439: }
1440:
1441: using System;
1442: using System.Linq;
1443: using System.Collections;
1444: using DemoLinq;
1445:
1446: namespace DemoLinq2
1447: {1448: class Program
1449: {1450: static void Main(string[] args)
1451: {1452: //初始化ArrayList
1453: ArrayList gList = new ArrayList();
1454: gList.Add(
1455: new GuestInfo { Name = "林晚荣", Age = 21, Tel = "888888**" }1456: );
1457:
1458: gList.Add(
1459: new GuestInfo { Name = "宁雨昔", Age = 36, Tel = "568923**" }1460: );
1461:
1462: gList.Add(
1463: new GuestInfo { Name = "洛凝", Age = 19, Tel = "985690**" }1464: );
1465:
1466: //查询 年龄大于 19 的客户
1467: var query = from GuestInfo guest in gList
1468: where guest.Age > 19
1469: select guest;
1470:
1471: //输出
1472: foreach (GuestInfo g in query)
1473: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));1474:
1475: Console.ReadKey();
1476:
1477: }
1478: }
1479: }
1480:
1481: 3.2/2复合from
1482:
1483: using System;
1484: using System.Collections.Generic;
1485: using System.Linq;
1486: using DemoLinq;
1487:
1488: namespace DemoFrom1
1489: {1490: class Program
1491: {1492: static void Main(string[] args)
1493: {1494: //初始化集合
1495: List<GuestInfo> gList = new List<GuestInfo>()
1496: {1497: new GuestInfo { 1498: Name = "林晚荣",
1499: Age = 21,
1500: TelTable = new List<string>(){ 1501: "026*-888888**",
1502: "13802588***"}
1503: },
1504: new GuestInfo { 1505: Name = "宁雨昔",
1506: Age = 36,
1507: TelTable = new List<string>(){ 1508: "098*-568923**",
1509: "132679856**"}
1510: },
1511: new GuestInfo { 1512: Name = "洛凝",
1513: Age = 19,
1514: TelTable = new List<string>(){ 1515: "033*-985690**",
1516: "153129057**"}
1517: },
1518: };
1519:
1520: //查找 电话号码 :132679856** 属于哪个客户
1521: var query = from guest in gList
1522: from tel in guest.TelTable
1523: where tel.IndexOf("132679856**") > -11524: select guest;
1525:
1526: //输出
1527: foreach (var g in query)
1528: {1529: Console.WriteLine(string.Format("{0} 年龄:{1}", g.Name, g.Age));1530: foreach (var t in g.TelTable)
1531: Console.WriteLine(string.Format(" 电话:{0}", t));1532: }
1533:
1534: Console.ReadKey();
1535: }
1536: }
1537: }
1538:
1539: 3.2.3 多个from 子句
1540: using System;
1541: using System.Collections.Generic;
1542: using System.Linq;
1543: using DemoLinq;
1544:
1545: namespace DemoFrom2
1546: {1547: class Program
1548: {1549: static void Main(string[] args)
1550: {1551: //初始化集合
1552: List<GuestInfo> gList = new List<GuestInfo>()
1553: {1554: new GuestInfo
1555: { 1556: Name = "林晚荣",
1557: Age = 21,
1558: Tel = "026*-888888**" },
1559: new GuestInfo
1560: { 1561: Name = "肖青漩",
1562: Age = 21,
1563: Tel = "017*-876543**"
1564: },
1565: new GuestInfo
1566: { 1567: Name = "董巧巧",
1568: Age = 19,
1569: Tel = "029*-981256**"
1570: },
1571: };
1572:
1573: List<GuestInfo> gList2 = new List<GuestInfo>()
1574: {1575: new GuestInfo
1576: {1577: Name = "萧玉霜",
1578: Age = 17,
1579: Tel = "137052668**"
1580: },
1581: new GuestInfo
1582: {1583: Name = "秦仙儿",
1584: Age = 20,
1585: Tel = "151983676**"
1586: },
1587: new GuestInfo
1588: {1589: Name = "萧玉若",
1590: Age = 21,
1591: Tel = "152987235**"
1592: },
1593: };
1594:
1595: //guest 表查找Age大于20,
1596: //guest2 查找Age大于17,
1597: //结果交叉链接
1598: var query = from guest in gList
1599: where guest.Age > 20
1600: from guest2 in gList2
1601: where guest2.Age > 17
1602: select new { guest, guest2 };1603:
1604: //输出
1605:
1606: foreach (var g in query)
1607: Console.WriteLine(string.Format("{0} {1}", g.guest.Name, g.guest2.Name));1608:
1609: Console.ReadKey();
1610: }
1611: }
1612: }
1613:
1614: 3.3 where 子句
1615: using System;
1616: using System.Collections.Generic;
1617: using System.Linq;
1618: using DemoLinq;
1619:
1620: namespace DemoWhere1
1621: {1622: class Program
1623: {1624: static void Main(string[] args)
1625: {1626: //初始化集合
1627: List<GuestInfo> gList = new List<GuestInfo>()
1628: {1629: new GuestInfo
1630: { 1631: Name = "林晚荣",
1632: Age = 21,
1633: Tel = "026*-888888**" },
1634: new GuestInfo
1635: { 1636: Name = "肖青漩",
1637: Age = 21,
1638: Tel = "017*-876543**"
1639: },
1640: new GuestInfo
1641: { 1642: Name = "董巧巧",
1643: Age = 19,
1644: Tel = "029*-981256**"
1645: },
1646: };
1647:
1648:
1649:
1650: ///名字是2个字或者姓"肖"
1651: ///并且 年龄大于等于19的客户
1652: var query = from guest in gList
1653: where (guest.Name.Length == 2 ||
1654: guest.Name.Substring(0, 1) == "肖") &&
1655: guest.Age >= 19
1656:
1657: select guest;
1658:
1659:
1660: foreach (var g in query)
1661: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));1662:
1663: Console.ReadKey();
1664: }
1665: }
1666: }
1667:
1668: 3.3.2 在where 子句中使用自定义函数
1669: using System;
1670: using System.Collections.Generic;
1671: using System.Linq;
1672: using DemoLinq;
1673:
1674: namespace DemoWhere2
1675: {1676: class Program
1677: {1678: static void Main(string[] args)
1679: {1680: //初始化集合
1681: List<GuestInfo> gList = new List<GuestInfo>()
1682: {1683: new GuestInfo
1684: { 1685: Name = "林晚荣",
1686: Age = 21,
1687: Tel = "026*-888888**" },
1688: new GuestInfo
1689: { 1690: Name = "肖青漩",
1691: Age = 21,
1692: Tel = "017*-876543**"
1693: },
1694: new GuestInfo
1695: { 1696: Name = "董巧巧",
1697: Age = 19,
1698: Tel = "029*-981256**"
1699: },
1700: };
1701:
1702: //查找名字是3个字并且第一个字是“董”的信息
1703: var query = from guest in gList
1704: where guest.Name.Length == 3 &&
1705: Check(guest.Name)
1706:
1707: select guest;
1708:
1709:
1710: foreach (var g in query)
1711: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));1712:
1713: Console.ReadKey();
1714:
1715: }
1716:
1717: /// <summary>
1718: /// 自定义函数
1719: /// 检测是否姓“董”
1720: /// </summary>
1721: static bool Check(string name)
1722: {1723: if (name.Substring(0, 1) == "董")
1724: return true;
1725:
1726: return false;
1727: }
1728: }
1729: }
1730:
1731: 3.3.3 动态谓词的筛选
1732:
1733: using System;
1734: using System.Collections.Generic;
1735: using System.Linq;
1736: using DemoLinq;
1737:
1738: namespace DemoWhere3
1739: {1740: class Program
1741: {1742: static void Main(string[] args)
1743: {1744: //初始化集合
1745: List<GuestInfo> gList = new List<GuestInfo>()
1746: {1747: new GuestInfo
1748: { 1749: Name = "林晚荣",
1750: Age = 21,
1751: Tel = "026*-888888**" },
1752: new GuestInfo
1753: { 1754: Name = "肖青漩",
1755: Age = 21,
1756: Tel = "017*-876543**"
1757: },
1758: new GuestInfo
1759: { 1760: Name = "董巧巧",
1761: Age = 19,
1762: Tel = "029*-981256**"
1763: },
1764: };
1765:
1766: //定义动态谓词数组
1767: string[] names = { "徐长今", "萧玉若", "肖青漩", "月牙儿" };1768:
1769: //查找包含在动态谓词数组中的名字
1770: var query = from guest in gList
1771: where names.Contains(guest.Name)
1772: select guest;
1773:
1774: foreach (var g in query)
1775: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));1776:
1777: Console.ReadKey();
1778:
1779: }
1780: }
1781: }
1782:
1783: 3.4 select 子句
1784:
1785: using System;
1786: using System.Collections.Generic;
1787: using System.Linq;
1788: using DemoLinq;
1789:
1790: namespace DemoSelect1
1791: {1792: class Program
1793: {1794: static void Main(string[] args)
1795: {1796: //初始化集合
1797: List<GuestInfo> gList = new List<GuestInfo>()
1798: {1799: new GuestInfo
1800: { 1801: Name = "宁雨昔",
1802: Age = 36,
1803: Tel = "098*-568923**" },
1804: new GuestInfo
1805: { 1806: Name = "肖青漩",
1807: Age = 21,
1808: Tel = "017*-876543**"
1809: },
1810: new GuestInfo
1811: { 1812: Name = "董巧巧",
1813: Age = 19,
1814: Tel = "029*-981256**"
1815: },
1816: };
1817:
1818:
1819: //筛选年龄小于30的客户信息并投影成MyGuestInfo类型
1820: var query = from guest in gList
1821: where guest.Age < 30
1822: select new MyGuestInfo { Name = guest.Name, Tel = guest.Tel };1823:
1824: foreach (var g in query)
1825: Console.WriteLine(string.Format("{0} 电话:{1} 类型:{2}", g.Name, g.Tel, g.ToString()));1826:
1827: Console.ReadKey();
1828: }
1829: }
1830: }
1831:
1832:
1833: 3.5 group
1834: using System;
1835: using System.Collections.Generic;
1836: using System.Linq;
1837: using DemoLinq;
1838:
1839: namespace DemoGurop1
1840: {1841: class Program
1842: {1843: static void Main(string[] args)
1844: {1845: //初始化集合
1846: List<GuestInfo> gList = new List<GuestInfo>()
1847: {1848: new GuestInfo
1849: { 1850: Name = "萧玉霜",
1851: Age = 17,
1852: Tel = "053*-985690**" },
1853: new GuestInfo
1854: { 1855: Name = "萧玉若",
1856: Age = 21,
1857: Tel = "035*-120967**"
1858: },
1859: new GuestInfo
1860: { 1861: Name = "徐长今",
1862: Age = 18,
1863: Tel = "039*-967512**"
1864: },
1865: new GuestInfo
1866: { 1867: Name = "徐芷晴",
1868: Age = 24,
1869: Tel = "089*-569832**"
1870: }
1871: };
1872:
1873:
1874: ////按照名字的第一个字进行分组
1875: //var query = from guest in gList
1876: // group guest by guest.Name.Substring(0, 1);
1877:
1878: ////遍历分组数据
1879: //foreach (IGrouping<string, GuestInfo> guestGroup in query)
1880: //{1881: // //输出当前分组的键值
1882: // Console.WriteLine(string.Format("分组键:{0} \n", guestGroup.Key));1883:
1884: // //遍历组内元素
1885: // foreach (var g in guestGroup)
1886: // Console.WriteLine(string.Format("{0} 电话:{1}", g.Name, g.Tel));1887: // Console.WriteLine("\n**********************************\n");1888: //}
1889:
1890:
1891:
1892: //按照年龄是否大于20分组
1893: var query = from guest in gList
1894: group guest by guest.Age > 20;
1895:
1896: //遍历分组数据
1897: foreach (var guestGroup in query)
1898: {1899: //输出当前分组的键值
1900: Console.WriteLine(string.Format("年龄是否大于 20 分组键:{0} \n", guestGroup.Key));1901:
1902: //遍历组内元素
1903: foreach (var g in guestGroup)
1904: Console.WriteLine(string.Format("{0} 电话:{1}", g.Name, g.Tel));1905: Console.WriteLine("\n**********************************\n");1906: }
1907:
1908: Console.ReadKey();
1909: }
1910: }
1911: }
1912:
1913: 3.6 into
1914: using System;
1915: using System.Collections.Generic;
1916: using System.Linq;
1917: using DemoLinq;
1918:
1919: namespace DemoInto
1920: {1921: class Program
1922: {1923: static void Main(string[] args)
1924: {1925: //初始化集合
1926: List<GuestInfo> gList = new List<GuestInfo>()
1927: {1928: new GuestInfo
1929: { 1930: Name = "萧玉霜",
1931: Age = 17,
1932: Tel = "053*-985690**" },
1933: new GuestInfo
1934: { 1935: Name = "萧玉若",
1936: Age = 21,
1937: Tel = "035*-120967**"
1938: },
1939: new GuestInfo
1940: { 1941: Name = "徐长今",
1942: Age = 18,
1943: Tel = "039*-967512**"
1944: },
1945: new GuestInfo
1946: { 1947: Name = "徐芷晴",
1948: Age = 24,
1949: Tel = "089*-569832**"
1950: }
1951: };
1952:
1953: //按照名字的第一个字进行分组并用分组key进行排序
1954: Console.WriteLine("into用于group子句的分组时刻");1955: var query = from guest in gList
1956: group guest by guest.Name.Substring(0, 1) into grguest
1957: orderby grguest.Key descending
1958: select grguest;
1959:
1960: //遍历分组数据
1961: foreach (var guestGroup in query)
1962: {1963: //输出当前分组的键值
1964: Console.WriteLine(string.Format("分组键:{0} \n", guestGroup.Key));1965:
1966: //遍历组内元素
1967: foreach (var g in guestGroup)
1968: Console.WriteLine(string.Format("{0} 电话:{1}", g.Name, g.Tel));1969: Console.WriteLine("\n**********************************\n");1970: }
1971:
1972: Console.WriteLine("\ninto用于select子句的投影时刻");1973:
1974: //select 子句中 的 info 子句使用
1975: var query2 = from guest in gList
1976: select new{NewName = guest.Name, NewAge = guest.Age} into newguest1977: orderby newguest.NewAge
1978: select newguest;
1979:
1980: //遍历分组数据
1981: foreach (var g in query2)
1982: {1983: Console.WriteLine(string.Format("{0} 年龄:{1}", g.NewName,g.NewAge));1984: }
1985:
1986: Console.ReadKey();
1987: }
1988: }
1989: }
1990:
1991: 3.7 排序子句
1992:
1993: using System;
1994: using System.Collections.Generic;
1995: using System.Linq;
1996: using DemoLinq;
1997:
1998: namespace DemoSort1
1999: {2000: class Program
2001: {2002: static void Main(string[] args)
2003: {2004: //初始化集合
2005: List<GuestInfo> gList = new List<GuestInfo>()
2006: {2007: new GuestInfo
2008: { 2009: Name = "林晚荣",
2010: Age = 21,
2011: Tel = "026*-888888**" },
2012: new GuestInfo
2013: { 2014: Name = "宁雨昔",
2015: Age = 36,
2016: Tel = "098*-568923**"
2017: },
2018: new GuestInfo
2019: { 2020: Name = "董巧巧",
2021: Age = 19,
2022: Tel = "029*-981256**"
2023: },
2024: };
2025:
2026: Console.WriteLine("按照年龄升序进行排序");2027: ///按照年龄升序进行排序
2028: var query = from guest in gList
2029: orderby guest.Age
2030: select guest;
2031:
2032: foreach (var g in query)
2033: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2034:
2035:
2036: Console.WriteLine("\n按照年龄降序进行排序");2037:
2038: ///按照年龄降序进行排序
2039: query = from guest in gList
2040: orderby guest.Age descending
2041: select guest;
2042:
2043: foreach (var g in query)
2044: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2045:
2046: Console.ReadKey();
2047:
2048: }
2049: }
2050: }
2051:
2052:
2053: 3.7.2 ThenBy 和ThenByDescending
2054:
2055: using System;
2056: using System.Collections.Generic;
2057: using System.Linq;
2058: using DemoLinq;
2059:
2060: namespace DemoSort2
2061: {2062: class Program
2063: {2064: static void Main(string[] args)
2065: {2066: //初始化集合
2067: List<GuestInfo> gList = new List<GuestInfo>()
2068: {2069: new GuestInfo
2070: { 2071: Name = "月牙儿",
2072: Age = 18,
2073: Tel = "067*-781256**"
2074: },
2075: new GuestInfo
2076: { 2077: Name = "徐长今",
2078: Age = 18,
2079: Tel = "039*-967512**"
2080: },
2081: new GuestInfo
2082: { 2083: Name = "依莲",
2084: Age = 18,
2085: Tel = "098*-231238**"
2086: },
2087: new GuestInfo
2088: { 2089: Name = "董巧巧",
2090: Age = 19,
2091: Tel = "029*-981256**"
2092: },
2093: };
2094:
2095: Console.WriteLine("按照年龄进行排序、按照名字字数进行次要排序");2096: ///按照年龄进行排序、按照名字字数进行次要排序
2097: var query = from guest in gList
2098: orderby guest.Age,guest.Name.Length
2099: select guest;
2100:
2101: foreach (var g in query)
2102: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2103:
2104: Console.WriteLine("\n按照年龄进行排序、按照名字字数进行降序次要排序");2105:
2106: ///按照年龄进行排序、按照名字字数进行降序次要排序
2107: query = from guest in gList
2108: orderby guest.Age, guest.Name.Length descending
2109: select guest;
2110:
2111: foreach (var g in query)
2112: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2113:
2114:
2115: Console.WriteLine("\n按照年龄进行排序、名字字数、电话排序");2116:
2117: ///按照年龄进行排序、按照名字字数进行次要排序、按照电话进行第三条件排序
2118: query = from guest in gList
2119: orderby guest.Age, guest.Name.Length, guest.Tel
2120: select guest;
2121:
2122: foreach (var g in query)
2123: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2124:
2125:
2126:
2127: Console.ReadKey();
2128: }
2129: }
2130: }
2131:
2132: 3.8 let 子句
2133: using System;
2134: using System.Collections.Generic;
2135: using System.Linq;
2136: using DemoLinq;
2137:
2138: namespace DemoLet
2139: {2140: class Program
2141: {2142: static void Main(string[] args)
2143: {2144: //初始化集合
2145: List<GuestInfo> gList = new List<GuestInfo>()
2146: {2147: new GuestInfo
2148: { 2149: Name = "林晚荣",
2150: Age = 21,
2151: Tel = "026*-888888**" },
2152: new GuestInfo
2153: { 2154: Name = "肖青漩",
2155: Age = 21,
2156: Tel = "017*-876543**"
2157: },
2158: new GuestInfo
2159: { 2160: Name = "董巧巧",
2161: Age = 19,
2162: Tel = "029*-981256**"
2163: },
2164: };
2165:
2166:
2167: ///姓"肖"或姓 "董"的客户
2168: var query = from guest in gList
2169: let g = guest.Name.Substring(0,1)
2170: where g == "肖" || g == "董"
2171: select guest;
2172:
2173: foreach (var g in query)
2174: Console.WriteLine(string.Format("{0} 年龄:{1} 电话:{2}", g.Name, g.Age, g.Tel));2175:
2176: Console.ReadKey();
2177: }
2178: }
2179: }
2180:
2181: 3.9 join
2182: using System;
2183: using System.Collections.Generic;
2184: using System.Linq;
2185:
2186: namespace DemoLinq
2187: {2188: class Program
2189: {2190: static void Main(string[] args)
2191: {2192: //初始化客户集合
2193: List<GuestInfo> gList = new List<GuestInfo>()
2194: {2195: new GuestInfo
2196: { 2197: Name = "林晚荣",
2198: Age = 21,
2199: Tel = "026*-888888**" },
2200: new GuestInfo
2201: { 2202: Name = "肖青漩",
2203: Age = 21,
2204: Tel = "017*-876543**"
2205: },
2206: new GuestInfo
2207: { 2208: Name = "董巧巧",
2209: Age = 19,
2210: Tel = "029*-981256**"
2211: },
2212: new GuestInfo
2213: { 2214: Name = "徐芷晴",
2215: Age = 24,
2216: Tel = "089*-569832**"
2217: }
2218: };
2219:
2220: ///初始化客户职务集合
2221: List<GuestTitle> titleList = new List<GuestTitle>()
2222: {2223: new GuestTitle{ Name = "林晚荣", Tilte = "金刀汉王"},2224: new GuestTitle{ Name = "林晚荣", Tilte = "天下第一丁"},2225: new GuestTitle{ Name = "肖青漩", Tilte = "出云公主"},2226: new GuestTitle{ Name = "董巧巧", Tilte = "酒店CEO"},2227: new GuestTitle{ Name = "董巧巧", Tilte = "乖巧人儿"}2228: };
2229:
2230: Console.WriteLine("内部联接");2231: //根据姓名进行内部联接
2232: var query = from guest in gList
2233: join title in titleList on guest.Name equals title.Name
2234: select new { Name = guest.Name, Title = title.Tilte, Age = guest.Age };2235:
2236:
2237: foreach (var g in query)
2238: Console.WriteLine(string.Format("{0} {1} 年龄:{2}", g.Title, g.Name, g.Age));2239:
2240:
2241: Console.WriteLine("\n根据姓名进行分组联接");2242:
2243: //根据姓名进行分组联接
2244: var query2 = from guest in gList
2245: join title in titleList on guest.Name equals title.Name into tgroup
2246: select new { Name = guest.Name, Titles = tgroup };2247:
2248: foreach (var g in query2)
2249: {2250: Console.WriteLine(g.Name);
2251: foreach (var g2 in g.Titles)
2252: Console.WriteLine(string.Format(" {0}", g2.Tilte));2253: }
2254:
2255:
2256: Console.WriteLine("\n左外部联接");2257: //根据姓名进行左外部联接
2258: var query3 = from guest in gList
2259: join title in titleList on guest.Name equals title.Name into tgroup
2260: from subtitle in tgroup.DefaultIfEmpty()
2261: select new { Name = guest.Name, Title = (subtitle == null ? "空缺" : subtitle.Tilte)} ;2262:
2263: foreach (var g in query3)
2264: Console.WriteLine(string.Format("{0} {1}", g.Title, g.Name));2265:
2266: Console.ReadKey();
2267:
2268: }
2269: }
2270: }
2271:
2272: 四、用于集合、文件、字符串对象的LINQ(LINQ to Objects)
2273:
2274: 4.1 Take Method
2275: using System;
2276: using System.Linq;
2277: using System.Collections.Generic;
2278:
2279: namespace DemoTake
2280: {2281: class Program
2282: {2283: static void Main(string[] args)
2284: {2285: //定义数组
2286: string[] nemes = { "林晚荣", "洛凝", "董巧巧", "依莲", "安碧如" };2287:
2288: Console.WriteLine("Take方法直接输出前3个元素");2289: //用Take方法直接输出前3个元素
2290: foreach (string s in nemes.Take(3))
2291: Console.WriteLine(s);
2292:
2293: var query = from n in nemes
2294: where n.Length == 2
2295: select n;
2296:
2297: Console.WriteLine("\n用Take方法输出查询结果的前1个元素");2298:
2299: //用Take方法输出查询结果的前1个元素
2300: foreach (string s in query.Take(1))
2301: Console.WriteLine(s);
2302:
2303: Console.ReadKey();
2304: }
2305: }
2306: }
2307:
2308: 4.2 TakeWhile
2309:
2310: using System;
2311: using System.Linq;
2312:
2313: namespace DemoTakeWhile1
2314: {2315: class Program
2316: {2317: static void Main(string[] args)
2318: {2319: //定义数组
2320: string[] nemes = { "依莲", "董巧巧","洛凝", "安碧如" };2321:
2322: var takenames = nemes.TakeWhile(n => n.Length == 2);
2323:
2324: //输出字数是2个的名字
2325: foreach (var s in takenames)
2326: Console.WriteLine(s);
2327:
2328: Console.ReadKey();
2329: }
2330: }
2331: }
2332: using System;
2333: using System.Linq;
2334:
2335: namespace DemoTakeWhile2
2336: {2337: class Program
2338: {2339: static void Main(string[] args)
2340: {2341: //定义数组
2342: string[] nemes = { "林晚荣", "洛凝", "董巧巧","出云公主", "依莲", "安碧如" };2343:
2344:
2345: //返回元素字数小于4并且索引小于5的元素
2346: var takenames = nemes.TakeWhile((n, i) => n.Length < 4 && i < 5);
2347: foreach (string s in takenames)
2348: Console.WriteLine(s);
2349:
2350:
2351: Console.ReadKey();
2352: }
2353: }
2354: }
2355:
2356:
2357: 4.4 skip
2358: using System;
2359: using System.Linq;
2360:
2361: namespace DemoSkip
2362: {2363: class Program
2364: {2365: static void Main(string[] args)
2366: {2367: //定义数组
2368: string[] nemes = { "林晚荣", "洛凝", "董巧巧", "依莲", "安碧如" };2369:
2370: Console.WriteLine("用Skip方法跳过前3个元素后输出");2371: //用Skip方法跳过前3个元素后输出
2372: foreach (string s in nemes.Skip(3))
2373: Console.WriteLine(s);
2374:
2375: var query = from n in nemes
2376: where n.Length == 3
2377: select n;
2378:
2379: Console.WriteLine("\n用Skip方法跳过第一个查询结果后输出");2380:
2381: //用Skip方法跳过第一个查询结果后输出
2382: foreach (string s in query.Skip(1))
2383: Console.WriteLine(s);
2384:
2385: Console.ReadKey();
2386: }
2387: }
2388: }
2389:
2390: 4.5 SkipWhile
2391: using System;
2392: using System.Linq;
2393:
2394: namespace DemoSkipWhile2
2395: {2396: class Program
2397: {2398: static void Main(string[] args)
2399: {2400: //定义数组
2401: string[] nemes = { "林晚荣", "洛凝", "董巧巧", "出云公主", "依莲", "安碧如" };2402:
2403:
2404: //跳过元素字数小于4并且索引小于5的元素
2405: var takenames = nemes.SkipWhile((n, i) => n.Length < 4 && i < 5);
2406: foreach (string s in takenames)
2407: Console.WriteLine(s);
2408:
2409: Console.ReadKey();
2410: }
2411: }
2412: }
2413:
2414: 4.6 Take、TakeWhile\ Skip\ SkipWhile
2415: 利用Take 和Skip实现分页
2416: using System;
2417: using System.Linq;
2418:
2419: namespace DemoPaginate
2420: {2421: class Program
2422: {2423: static void Main(string[] args)
2424: {2425: //当前页码
2426: int ipage = 0;
2427: //每页记录数
2428: int ipagesize = 2;
2429:
2430: //定义数组
2431: string[] nemes = { "林晚荣", "洛凝", "董巧巧", "出云公主", "依莲", "安碧如" };2432:
2433: Console.WriteLine(string.Format("输出第 {0} 页记录", ipage));2434: //输出第 0 页记录
2435: var q = nemes.Skip(ipagesize * ipage).Take(ipagesize);
2436: foreach (string s in q)
2437: Console.WriteLine(s);
2438:
2439: ipage++;
2440: Console.WriteLine(string.Format("\n输出第 {0} 页记录", ipage));2441: //输出第 1 页记录
2442: var q2 = nemes.Skip(ipagesize * ipage).Take(ipagesize);
2443: foreach (string s in q2)
2444: Console.WriteLine(s);
2445:
2446: ipage++;
2447: Console.WriteLine(string.Format("\n输出第 {0} 页记录", ipage));2448: //输出第 2 页记录
2449: var q3 = nemes.Skip(ipagesize * ipage).Take(ipagesize);
2450: foreach (string s in q3)
2451: Console.WriteLine(s);
2452:
2453: Console.ReadKey();
2454:
2455:
2456: }
2457: }
2458: }
2459: 4.8 Reverse
2460:
2461: using System;
2462: using System.Linq;
2463:
2464: namespace DemoReverse
2465: {2466: class Program
2467: {2468: static void Main(string[] args)
2469: {2470: string str = "Reverse方法,用于反转序列中元素的顺序。";
2471:
2472: Console.WriteLine(str);
2473:
2474: Console.WriteLine("\n反转字符串\n");2475:
2476: var strrev = str.ToCharArray().Reverse();
2477:
2478: foreach (var c in strrev)
2479: Console.Write(c);
2480:
2481: Console.ReadKey();
2482: }
2483: }
2484: }
2485:
2486: 4.9 Distinct
2487: using System;
2488: using System.Linq;
2489:
2490: namespace DemoDistinct1
2491: {2492: class Program
2493: {2494: static void Main(string[] args)
2495: {2496: ///定义一个有重复元素的数组
2497: string[] girls = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿",2498: "月牙儿", "秦仙儿", "洛凝", "萧玉霜"};
2499:
2500: Console.WriteLine("含有重复元素的数组");2501: foreach (var g in girls)
2502: Console.Write(string.Format("{0} ", g)); 2503:
2504: var q = girls.Distinct();
2505:
2506: Console.WriteLine("\n\n去除重复元素的序列");2507: foreach (var g in q)
2508: Console.Write(string.Format("{0} ", g)); 2509:
2510: Console.ReadKey();
2511: }
2512: }
2513: }
2514: 4.10 Distinct
2515:
2516: using System.Collections.Generic;
2517:
2518: namespace DemoDistinct2
2519: {2520: /// <summary>
2521: /// 自定义相等比较器
2522: /// </summary>
2523: public class MyEqualityComparer<T>: IEqualityComparer<T>
2524: {2525:
2526: #region IEqualityComparer<T> 成员
2527:
2528: public bool Equals(T x, T y)
2529: {2530: string stmp = x as string;
2531:
2532: if (stmp != null)
2533: {2534: if (stmp == "萧玉霜")
2535: return false;
2536: }
2537:
2538: if (x.GetHashCode() == y.GetHashCode())
2539: return true;
2540: else
2541: return false;
2542: }
2543:
2544: public int GetHashCode(T obj)
2545: {2546: return obj.GetHashCode();
2547: }
2548:
2549: #endregion
2550: }
2551: }
2552:
2553: 4.11 Union
2554: using System;
2555: using System.Linq;
2556:
2557: namespace DemoDistinct2
2558: {2559: class Program
2560: {2561: static void Main(string[] args)
2562: {2563: ///定义一个有重复元素的数组
2564: string[] girls = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿",2565: "月牙儿", "萧玉霜","秦仙儿", "洛凝", "萧玉霜"};
2566:
2567: Console.WriteLine("含有重复元素的数组");2568: foreach (var g in girls)
2569: Console.Write(string.Format("{0} ", g));2570:
2571: var q = girls.Distinct(new MyEqualityComparer<string>());
2572:
2573: Console.WriteLine("\n\n去除重复元素的序列");2574: foreach (var g in q)
2575: Console.Write(string.Format("{0} ", g));2576:
2577: Console.ReadKey();
2578: }
2579: }
2580: }
2581:
2582:
2583: 4.12 union
2584: using System;
2585: using System.Linq;
2586: using DemoDistinct2;
2587:
2588: namespace DemoUnion2
2589: {2590: class Program
2591: {2592: static void Main(string[] args)
2593: {2594: ///定义数组
2595: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2596: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2597:
2598: var girls = girls1.Union(girls2,new MyEqualityComparer<string>());
2599:
2600: Console.WriteLine("合并后的序列");2601: foreach (var g in girls)
2602: Console.Write(string.Format("{0} ", g));2603:
2604: Console.ReadKey();
2605: }
2606: }
2607: }
2608:
2609: 4.13 Concat
2610:
2611:
2612: using System;
2613: using System.Linq;
2614:
2615: namespace DemoConcat
2616: {2617: class Program
2618: {2619: static void Main(string[] args)
2620: {2621: ///定义数组
2622: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2623: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2624:
2625: var girls = girls1.Concat(girls2);
2626:
2627: Console.WriteLine("合并后的序列");2628: foreach (var g in girls)
2629: Console.Write(string.Format("{0} ", g));2630:
2631: Console.ReadKey();
2632: }
2633: }
2634: }
2635:
2636: 4.14 Intersect
2637: using System;
2638: using System.Linq;
2639:
2640: namespace DemoIntersect1
2641: {2642: class Program
2643: {2644: static void Main(string[] args)
2645: {2646: ///定义数组
2647: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2648: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2649:
2650: var girls = girls1.Intersect(girls2);
2651:
2652: Console.WriteLine("在2个数组中都存在的元素序列");2653: foreach (var g in girls)
2654: Console.Write(string.Format("{0} ", g));2655:
2656: Console.ReadKey();
2657: }
2658: }
2659: }
2660:
2661: 4.15 使用自定义比较器找出两个数组汇总相同的元素
2662:
2663: using System.Collections.Generic;
2664:
2665: namespace DemoDistinct2
2666: {2667: /// <summary>
2668: /// 自定义相等比较器
2669: /// </summary>
2670: public class MyEqualityComparer<T>: IEqualityComparer<T>
2671: {2672:
2673: #region IEqualityComparer<T> 成员
2674:
2675: public bool Equals(T x, T y)
2676: {2677: string stmp = x as string;
2678:
2679: if (stmp != null)
2680: {2681: if (stmp == "萧玉霜")
2682: return false;
2683: }
2684:
2685: if (x.GetHashCode() == y.GetHashCode())
2686: return true;
2687: else
2688: return false;
2689: }
2690:
2691: public int GetHashCode(T obj)
2692: {2693: return obj.GetHashCode();
2694: }
2695:
2696: #endregion
2697: }
2698: }
2699: using System;
2700: using System.Linq;
2701: using DemoDistinct2;
2702:
2703: namespace DemoIntersect2
2704: {2705: class Program
2706: {2707: static void Main(string[] args)
2708: {2709: ///定义数组
2710: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2711: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2712:
2713: var girls = girls1.Intersect(girls2,new MyEqualityComparer<string>());
2714:
2715: Console.WriteLine("在2个数组中都存在的元素序列");2716: foreach (var g in girls)
2717: Console.Write(string.Format("{0} ", g));2718:
2719: Console.ReadKey();
2720: }
2721: }
2722: }
2723:
2724:
2725: 4.16 找出两个数组中不同的元素 Except
2726: using System;
2727: using System.Linq;
2728:
2729: namespace DemoExcept1
2730: {2731: class Program
2732: {2733: static void Main(string[] args)
2734: {2735: ///定义数组
2736: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2737: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2738:
2739: var girls = girls1.Except(girls2);
2740:
2741: Console.WriteLine("2个数组中不同元素");2742: foreach (var g in girls)
2743: Console.Write(string.Format("{0} ", g));2744:
2745: Console.ReadKey();
2746: }
2747: }
2748: }
2749: 4.17 使用自定义比较器找出两个数组中不同的元素Except
2750: using System;
2751: using System.Linq;
2752: using DemoDistinct2;
2753:
2754: namespace DemoExcept2
2755: {2756: class Program
2757: {2758: static void Main(string[] args)
2759: {2760: ///定义数组
2761: string[] girls1 = { "萧玉若", "洛凝", "萧玉霜", "秦仙儿" };2762: string[] girls2 = { "月牙儿", "秦仙儿", "洛凝", "萧玉霜" };2763:
2764: var girls = girls1.Except(girls2, new MyEqualityComparer<string>());
2765:
2766: Console.WriteLine("2个数组中不同元素");2767: foreach (var g in girls)
2768: Console.Write(string.Format("{0} ", g));2769:
2770: Console.ReadKey();
2771: }
2772: }
2773: }
2774: 4.18 Range
2775: using System;
2776: using System.Linq;
2777:
2778: namespace DemoRange
2779: {2780: class Program
2781: {2782: static void Main(string[] args)
2783: {2784: //起始页码
2785: int istart = 18;
2786:
2787: //结束页码
2788: int iend = 26;
2789:
2790: var pages = Enumerable.Range(istart, iend - istart + 1);
2791:
2792: Console.WriteLine("输出页码");2793: foreach (var n in pages)
2794: Console.Write(string.Format("[{0}] ", n));2795:
2796: Console.ReadKey();
2797: }
2798: }
2799: }
2800: 4.19 生成含有5个相同类型元素的序列
2801: using System;
2802: using System.Linq;
2803:
2804: namespace DemoRepeat
2805: {2806: class Program
2807: {2808: static void Main(string[] args)
2809: {2810: ///定义一个匿名类型
2811: var orange = new {Color="橘色",Name="桔子"};2812:
2813: var oranges = Enumerable.Repeat(orange,5);
2814:
2815: Console.WriteLine("包含5个匿名类型的元素");2816: foreach (var n in oranges)
2817: Console.WriteLine(string.Format("{0}的{1} ", n.Color, n.Name));2818:
2819: Console.ReadKey();
2820: }
2821: }
2822: }
2823:
2824: 4.20 生成String 类型的空序列
2825: using System;
2826: using System.Collections.Generic;
2827: using System.Linq;
2828:
2829: namespace DemoEmpty
2830: {2831: class Program
2832: {2833: static void Main(string[] args)
2834: {2835:
2836: IEnumerable<string> empty = Enumerable.Empty<string>();
2837:
2838: Console.WriteLine(string.Format("序列元素数:{0}",empty.Count()));2839:
2840: Console.ReadKey();
2841: }
2842: }
2843: }
2844:
2845: 4.21 检测多种类型序列是否为空DefaultIfEmpty
2846: using System;
2847: using System.Linq;
2848:
2849: namespace DemoDefaultIfEmpty
2850: {2851: class Program
2852: {2853: static void Main(string[] args)
2854: {2855: //定义数组
2856: string[] nemes = { "林晚荣", "洛凝", "董巧巧", "依莲", "安碧如" };2857: //空的int类型序列
2858: var intempty = Enumerable.Empty<int>();
2859:
2860: //没有找的元素的序列
2861: var empty = from n in nemes
2862: where n == "宁雨昔"
2863: select n;
2864:
2865: Console.WriteLine("DefaultIfEmpty 返回有内容的序列");2866: foreach (string s in nemes.DefaultIfEmpty())
2867: Console.Write(string.Format("{0} ", s));2868:
2869:
2870: Console.WriteLine(string.Format("\nempty 空序列元素数:{0}", intempty.Count()));2871:
2872: Console.WriteLine(string.Format("empty 空序列应用DefaultIfEmpty方法后的元素数:{0}", empty.DefaultIfEmpty().Count()));2873:
2874: Console.Write(string.Format("empty 空序列应用DefaultIfEmpty方法后的元素值:"));2875: foreach (var s in empty.DefaultIfEmpty())
2876: if (s == null)
2877: Console.Write("null");2878:
2879:
2880: Console.WriteLine("\n\n****************************************\n");2881:
2882: Console.WriteLine(string.Format("intempty 空序列元素数:{0}", intempty.Count()));2883:
2884: Console.WriteLine(string.Format("intempty 空序列应用DefaultIfEmpty方法后的元素数:{0}", intempty.DefaultIfEmpty().Count()));2885:
2886: Console.Write(string.Format("intempty 空序列应用DefaultIfEmpty方法后的元素值:"));2887: foreach (var s in intempty.DefaultIfEmpty())
2888: Console.Write(s);
2889:
2890: Console.ReadKey();
2891: }
2892: }
2893: }
2894:
2895: 4.23 ArrayList 序列转换成泛型序列
2896:
2897: using System;
2898: using System.Collections;
2899: using System.Collections.Generic;
2900: using System.Linq;
2901:
2902: namespace DemoCast
2903: {2904: class Program
2905: {2906: static void Main(string[] args)
2907: {2908: //定义ArrayList
2909: //由于ArrayList没有实现泛型IEnumerable<T>接口,
2910: //所以无法用集合初始化器
2911: ArrayList nemes = new ArrayList();
2912: nemes.Add( "林晚荣");
2913: nemes.Add( "洛凝");
2914: nemes.Add( "董巧巧");
2915: nemes.Add( "依莲");
2916:
2917: IEnumerable<string> newnames = nemes.Cast<string>();
2918:
2919: foreach (string s in newnames)
2920: Console.Write(string.Format("{0} ",s));2921:
2922: Console.ReadKey();
2923: }
2924: }
2925: }
2926:
2927: 4.24 OfType 方法
2928: 用OfType方法转换ArrayList序列转换成泛型序列
2929: using System;
2930: using System.Collections;
2931: using System.Collections.Generic;
2932: using System.Linq;
2933:
2934: namespace DemoOfType
2935: {2936: class Program
2937: {2938: static void Main(string[] args)
2939: {2940: //定义ArrayList
2941: ArrayList nemes = new ArrayList();
2942: nemes.Add("林晚荣");2943: nemes.Add("洛凝");2944: nemes.Add(100);
2945: nemes.Add(new Stack());
2946: nemes.Add("董巧巧");2947:
2948: IEnumerable<string> newnames = nemes.OfType<string>();
2949:
2950: foreach (string s in newnames)
2951: Console.Write(string.Format("{0} ", s));2952:
2953: Console.ReadKey();
2954: }
2955: }
2956: }
2957:
2958: 4.25 将IQueryable 类型转换为IEnumerable类型
2959:
2960: 4.26用于立即执行的Enumerable类方法成员
2961: using System;
2962: using System.Collections.Generic;
2963: using System.Linq;
2964:
2965: namespace DemoToArray
2966: {2967: class Program
2968: {2969: static void Main(string[] args)
2970: {2971: ///定义List
2972: List<string> lst = new List<string>{ "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };2973:
2974: var query = from t in lst
2975: where t.IndexOf("公主") > -12976: select t;
2977:
2978: string[] strarray = query.ToArray();
2979:
2980: Console.WriteLine(string.Format("lst 类型:{0}", lst.GetType().Name));2981: Console.WriteLine(string.Format("query 类型:{0}", query.GetType().Name));2982: Console.WriteLine(string.Format("strarray 类型:{0}", strarray.GetType().Name));2983:
2984: Console.Write("\nstrarray 内容:");2985: foreach (string s in strarray)
2986: Console.Write(string.Format(" {0}", s));2987:
2988: Console.ReadKey();
2989: }
2990: }
2991: }
2992:
2993: 4.27 将序列转换为泛型List<T>-------ToList
2994:
2995: using System;
2996: using System.Collections.Generic;
2997: using System.Linq;
2998:
2999: namespace DemoToList
3000: {3001: class Program
3002: {3003: static void Main(string[] args)
3004: {3005: ///定义数组
3006: string[] strarray = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3007:
3008: var query = from t in strarray
3009: where t.IndexOf("公主") > -13010: select t;
3011:
3012: List<string> lst = query.ToList();
3013:
3014: Console.WriteLine(string.Format("strarray 类型:{0}", strarray.GetType().Name));3015: Console.WriteLine(string.Format("query 类型:{0}", query.GetType().Name));3016: Console.WriteLine(string.Format("lst 类型:{0}", lst.GetType().Name));3017:
3018: Console.Write("\nlst 内容:");3019: foreach (string s in lst)
3020: Console.Write(string.Format(" {0}", s));3021:
3022: Console.ReadKey();
3023: }
3024: }
3025: }
3026:
3027: 4.28 ToDictionary
3028: using System;
3029: using System.Collections.Generic;
3030: using System.Linq;
3031: using DemoLinq;
3032:
3033: namespace DemoToDictionary1
3034: {3035: class Program
3036: {3037: static void Main(string[] args)
3038: {3039: //初始化集合
3040: List<GuestInfo> gList = new List<GuestInfo>()
3041: {3042: new GuestInfo
3043: { 3044: Name = "萧玉霜",
3045: Age = 17,
3046: Tel = "053*-985690**" },
3047: new GuestInfo
3048: { 3049: Name = "萧玉若",
3050: Age = 21,
3051: Tel = "035*-120967**"
3052: },
3053: new GuestInfo
3054: { 3055: Name = "徐长今",
3056: Age = 18,
3057: Tel = "039*-967512**"
3058: },
3059: new GuestInfo
3060: { 3061: Name = "徐芷晴",
3062: Age = 24,
3063: Tel = "089*-569832**"
3064: }
3065: };
3066:
3067:
3068: //使用Tel属性作为Dictionary的键值
3069: Dictionary<string, GuestInfo> dictionary = gList.ToDictionary(guest => guest.Tel);
3070:
3071: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3072: Console.WriteLine(string.Format("dictionary 类型:{0}", dictionary.GetType().Name));3073:
3074: Console.WriteLine("\ndictionary 内容:");3075: foreach (string s in dictionary.Keys)
3076: Console.WriteLine(string.Format("键值:{0},姓名:{1}", s, dictionary[s].Name));3077:
3078: Console.ReadKey();
3079:
3080: }
3081: }
3082: }
3083:
3084: using System.Collections.Generic;
3085:
3086: namespace DemoDistinct2
3087: {3088: /// <summary>
3089: /// 自定义相等比较器
3090: /// </summary>
3091: public class MyEqualityComparer<T>: IEqualityComparer<T>
3092: {3093:
3094: #region IEqualityComparer<T> 成员
3095:
3096: public bool Equals(T x, T y)
3097: {3098: string stmp = x as string;
3099:
3100: if (stmp != null)
3101: {3102: if (stmp == "萧玉霜")
3103: return false;
3104: }
3105:
3106: if (x.GetHashCode() == y.GetHashCode())
3107: return true;
3108: else
3109: return false;
3110: }
3111:
3112: public int GetHashCode(T obj)
3113: {3114: return obj.GetHashCode();
3115: }
3116:
3117: #endregion
3118: }
3119: }
3120: using System;
3121: using System.Collections.Generic;
3122: using System.Linq;
3123: using DemoDistinct2;
3124: using DemoLinq;
3125:
3126: namespace DemoToDictionary2
3127: {3128: class Program
3129: {3130: static void Main(string[] args)
3131: {3132: //初始化集合
3133: List<GuestInfo> gList = new List<GuestInfo>()
3134: {3135: new GuestInfo
3136: { 3137: Name = "萧玉霜",
3138: Age = 17,
3139: Tel = "053*-985690**" },
3140: new GuestInfo
3141: { 3142: Name = "萧玉若",
3143: Age = 21,
3144: Tel = "035*-120967**"
3145: },
3146: new GuestInfo
3147: { 3148: Name = "徐长今",
3149: Age = 18,
3150: Tel = "039*-967512**"
3151: },
3152: new GuestInfo
3153: { 3154: Name = "徐芷晴",
3155: Age = 24,
3156: Tel = "089*-569832**"
3157: }
3158: };
3159:
3160:
3161: //使用Name属性作为Dictionary的键值
3162: Dictionary<string, GuestInfo> dictionary = gList.ToDictionary(guest => guest.Name,new MyEqualityComparer<string>());
3163:
3164: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3165: Console.WriteLine(string.Format("dictionary 类型:{0}", dictionary.GetType().Name));3166:
3167: Console.WriteLine("\n检查是否有不能通过键值访问的元素");3168: foreach (var s in dictionary)
3169: {3170: if(!dictionary.Keys.Contains(s.Key))
3171: Console.WriteLine(string.Format("键值为 {0} 的内容,不能通过键值访问。", s.Key));3172: }
3173:
3174: Console.WriteLine("\n遍历dictionary全部的元素");3175: foreach (var s in dictionary)
3176: Console.WriteLine(string.Format("键值:{0},电话:{1}", s.Key, s.Value.Tel));3177:
3178: Console.ReadKey();
3179:
3180: }
3181: }
3182: }
3183: using System;
3184: using System.Collections.Generic;
3185: using System.Linq;
3186: using DemoLinq;
3187:
3188: namespace DemoToDictionary3
3189: {3190: class Program
3191: {3192: static void Main(string[] args)
3193: {3194: //初始化集合
3195: List<GuestInfo> gList = new List<GuestInfo>()
3196: {3197: new GuestInfo
3198: { 3199: Name = "萧玉霜",
3200: Age = 17,
3201: Tel = "053*-985690**" },
3202: new GuestInfo
3203: { 3204: Name = "萧玉若",
3205: Age = 21,
3206: Tel = "035*-120967**"
3207: },
3208: new GuestInfo
3209: { 3210: Name = "徐长今",
3211: Age = 18,
3212: Tel = "039*-967512**"
3213: },
3214: new GuestInfo
3215: { 3216: Name = "徐芷晴",
3217: Age = 24,
3218: Tel = "089*-569832**"
3219: }
3220: };
3221:
3222:
3223: //使用Tel属性作为Dictionary的键值,Name属性作为Value值
3224: Dictionary<string, string> dictionary = gList.ToDictionary(guest => guest.Tel,
3225: g=>g.Name);
3226:
3227: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3228: Console.WriteLine(string.Format("dictionary 类型:{0}", dictionary.GetType().Name));3229:
3230: Console.WriteLine("\ndictionary 内容:");3231: foreach (string s in dictionary.Keys)
3232: Console.WriteLine(string.Format("键值:{0},姓名:{1}", s, dictionary[s]));3233:
3234: Console.ReadKey();
3235:
3236: }
3237: }
3238: }
3239: using System;
3240: using System.Collections.Generic;
3241: using System.Linq;
3242: using DemoDistinct2;
3243: using DemoLinq;
3244:
3245: namespace DemoToDictionary4
3246: {3247: class Program
3248: {3249: static void Main(string[] args)
3250: {3251: //初始化集合
3252: List<GuestInfo> gList = new List<GuestInfo>()
3253: {3254: new GuestInfo
3255: { 3256: Name = "萧玉霜",
3257: Age = 17,
3258: Tel = "053*-985690**" },
3259: new GuestInfo
3260: { 3261: Name = "萧玉若",
3262: Age = 21,
3263: Tel = "035*-120967**"
3264: },
3265: new GuestInfo
3266: { 3267: Name = "徐长今",
3268: Age = 18,
3269: Tel = "039*-967512**"
3270: },
3271: new GuestInfo
3272: { 3273: Name = "徐芷晴",
3274: Age = 24,
3275: Tel = "089*-569832**"
3276: }
3277: };
3278:
3279:
3280: //使用Name属性作为Dictionary的键值,Tel属性作为Value值
3281: Dictionary<string, string> dictionary = gList.ToDictionary(guest => guest.Name,g => g.Tel, new MyEqualityComparer<string>());
3282:
3283: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3284: Console.WriteLine(string.Format("dictionary 类型:{0}", dictionary.GetType().Name));3285:
3286: Console.WriteLine("\n检查是否有不能通过键值访问的元素");3287: foreach (var s in dictionary)
3288: {3289: if (!dictionary.Keys.Contains(s.Key))
3290: Console.WriteLine(string.Format("键值为 {0} 的内容,不能通过键值访问。", s.Key));3291: }
3292:
3293: Console.WriteLine("\n遍历dictionary全部的元素");3294: foreach (var s in dictionary)
3295: Console.WriteLine(string.Format("键值:{0},电话:{1}", s.Key, s.Value));3296:
3297: Console.ReadKey();
3298:
3299: }
3300: }
3301: }
3302:
3303: 4.32 List<GuestInfo>转换为Lookup<string,GuestInfo>类型
3304: Lookup 有些像类型转换后的分组操作
3305:
3306: using System;
3307: using System.Collections.Generic;
3308: using System.Linq;
3309: using DemoLinq;
3310:
3311: namespace DemoToLookup1
3312: {3313: class Program
3314: {3315: static void Main(string[] args)
3316: {3317: //初始化集合
3318: List<GuestInfo> gList = new List<GuestInfo>()
3319: {3320: new GuestInfo
3321: { 3322: Name = "萧玉霜",
3323: Age = 17,
3324: Tel = "053*-985690**" },
3325: new GuestInfo
3326: { 3327: Name = "萧玉若",
3328: Age = 21,
3329: Tel = "035*-120967**"
3330: },
3331: new GuestInfo
3332: { 3333: Name = "徐长今",
3334: Age = 18,
3335: Tel = "039*-967512**"
3336: },
3337: new GuestInfo
3338: { 3339: Name = "徐芷晴",
3340: Age = 24,
3341: Tel = "089*-569832**"
3342: }
3343: };
3344:
3345:
3346: //使用姓作为Lookup的键值
3347: ILookup<string, GuestInfo> lookup = gList.ToLookup(guest => guest.Name.Substring(0,1));
3348:
3349: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3350: Console.WriteLine(string.Format("lookup 类型:{0}", lookup.GetType().Name));3351:
3352: Console.WriteLine("\nlookup 内容:");3353: foreach (var k in lookup)
3354: {3355: Console.WriteLine(string.Format("键值:{0}", k.Key));3356: foreach (var v in k)
3357: Console.WriteLine(string.Format("姓名:{0},年龄:{1}", v.Name,v.Age));3358:
3359: Console.WriteLine("****************************");3360: }
3361: Console.ReadKey();
3362: }
3363: }
3364: }
3365:
3366: using System.Collections.Generic;
3367:
3368: namespace DemoDistinct2
3369: {3370: /// <summary>
3371: /// 自定义相等比较器
3372: /// </summary>
3373: public class MyEqualityComparer<T>: IEqualityComparer<T>
3374: {3375:
3376: #region IEqualityComparer<T> 成员
3377:
3378: public bool Equals(T x, T y)
3379: {3380: string stmp = x as string;
3381:
3382: if (stmp != null)
3383: {3384: if (stmp == "萧")
3385: return false;
3386: }
3387:
3388: if (x.GetHashCode() == y.GetHashCode())
3389: return true;
3390: else
3391: return false;
3392: }
3393:
3394: public int GetHashCode(T obj)
3395: {3396: return obj.GetHashCode();
3397: }
3398:
3399: #endregion
3400: }
3401: }
3402:
3403: using System;
3404: using System.Collections.Generic;
3405: using System.Linq;
3406: using DemoDistinct2;
3407: using DemoLinq;
3408:
3409: namespace DemoToLookup2
3410: {3411: class Program
3412: {3413: static void Main(string[] args)
3414: {3415: //初始化集合
3416: List<GuestInfo> gList = new List<GuestInfo>()
3417: {3418: new GuestInfo
3419: { 3420: Name = "萧玉霜",
3421: Age = 17,
3422: Tel = "053*-985690**" },
3423: new GuestInfo
3424: { 3425: Name = "萧玉若",
3426: Age = 21,
3427: Tel = "035*-120967**"
3428: },
3429: new GuestInfo
3430: { 3431: Name = "徐长今",
3432: Age = 18,
3433: Tel = "039*-967512**"
3434: },
3435: new GuestInfo
3436: { 3437: Name = "徐芷晴",
3438: Age = 24,
3439: Tel = "089*-569832**"
3440: }
3441: };
3442:
3443:
3444: //使用姓作为Lookup的键值
3445: ILookup<string, GuestInfo> lookup = gList.ToLookup(guest => guest.Name.Substring(0, 1), new MyEqualityComparer<string>());
3446:
3447: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3448: Console.WriteLine(string.Format("lookup 类型:{0}", lookup.GetType().Name));3449:
3450: Console.WriteLine("\nlookup 内容:");3451: foreach (var k in lookup)
3452: {3453: Console.WriteLine(string.Format("键值:{0}", k.Key));3454: foreach (var v in k)
3455: Console.WriteLine(string.Format("姓名:{0},年龄:{1}", v.Name, v.Age));3456:
3457: Console.WriteLine("****************************");3458: }
3459: Console.ReadKey();
3460: }
3461: }
3462: }
3463:
3464:
3465: using System;
3466: using System.Collections.Generic;
3467: using System.Linq;
3468: using DemoLinq;
3469:
3470: namespace DemoLookup3
3471: {3472: class Program
3473: {3474: static void Main(string[] args)
3475: {3476: //初始化集合
3477: List<GuestInfo> gList = new List<GuestInfo>()
3478: {3479: new GuestInfo
3480: { 3481: Name = "萧玉霜",
3482: Age = 17,
3483: Tel = "053*-985690**" },
3484: new GuestInfo
3485: { 3486: Name = "萧玉若",
3487: Age = 21,
3488: Tel = "035*-120967**"
3489: },
3490: new GuestInfo
3491: { 3492: Name = "徐长今",
3493: Age = 18,
3494: Tel = "039*-967512**"
3495: },
3496: new GuestInfo
3497: { 3498: Name = "徐芷晴",
3499: Age = 24,
3500: Tel = "089*-569832**"
3501: }
3502: };
3503:
3504:
3505: //使用姓作为Lookup的键值Value值为Name属性
3506: ILookup<string, string> lookup = gList.ToLookup(guest => guest.Name.Substring(0, 1),g=>g.Name);
3507:
3508: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3509: Console.WriteLine(string.Format("lookup 类型:{0}", lookup.GetType().Name));3510:
3511: Console.WriteLine("\nlookup 内容:");3512: foreach (var k in lookup)
3513: {3514: Console.WriteLine(string.Format("键值:{0}", k.Key));3515: foreach (var v in k)
3516: Console.WriteLine(string.Format("姓名:{0}", v));3517:
3518: Console.WriteLine("****************************");3519: }
3520: Console.ReadKey();
3521: }
3522: }
3523: }
3524:
3525:
3526: using System.Collections.Generic;
3527:
3528: namespace DemoDistinct2
3529: {3530: /// <summary>
3531: /// 自定义相等比较器
3532: /// </summary>
3533: public class MyEqualityComparer<T>: IEqualityComparer<T>
3534: {3535:
3536: #region IEqualityComparer<T> 成员
3537:
3538: public bool Equals(T x, T y)
3539: {3540: string stmp = x as string;
3541:
3542: if (stmp != null)
3543: {3544: if (stmp == "萧")
3545: return false;
3546: }
3547:
3548: if (x.GetHashCode() == y.GetHashCode())
3549: return true;
3550: else
3551: return false;
3552: }
3553:
3554: public int GetHashCode(T obj)
3555: {3556: return obj.GetHashCode();
3557: }
3558:
3559: #endregion
3560: }
3561: }
3562: using System;
3563: using System.Collections.Generic;
3564: using System.Linq;
3565: using DemoDistinct2;
3566: using DemoLinq;
3567:
3568: namespace DemoToLookup4
3569: {3570: class Program
3571: {3572: static void Main(string[] args)
3573: {3574: //初始化集合
3575: List<GuestInfo> gList = new List<GuestInfo>()
3576: {3577: new GuestInfo
3578: { 3579: Name = "萧玉霜",
3580: Age = 17,
3581: Tel = "053*-985690**" },
3582: new GuestInfo
3583: { 3584: Name = "萧玉若",
3585: Age = 21,
3586: Tel = "035*-120967**"
3587: },
3588: new GuestInfo
3589: { 3590: Name = "徐长今",
3591: Age = 18,
3592: Tel = "039*-967512**"
3593: },
3594: new GuestInfo
3595: { 3596: Name = "徐芷晴",
3597: Age = 24,
3598: Tel = "089*-569832**"
3599: }
3600: };
3601:
3602:
3603: //使用姓作为Lookup的键值Name属性作为Value
3604: ILookup<string, string> lookup = gList.ToLookup(guest => guest.Name.Substring(0, 1),g=>g.Name,new MyEqualityComparer<string>());
3605:
3606: Console.WriteLine(string.Format("gList 类型:{0}", gList.GetType().Name));3607: Console.WriteLine(string.Format("lookup 类型:{0}", lookup.GetType().Name));3608:
3609: Console.WriteLine("\nlookup 内容:");3610: foreach (var k in lookup)
3611: {3612: Console.WriteLine(string.Format("键值:{0}", k.Key));3613: foreach (var v in k)
3614: Console.WriteLine(string.Format("姓名:{0}", v));3615:
3616: Console.WriteLine("****************************");3617: }
3618:
3619: Console.ReadKey();
3620: }
3621: }
3622: }
3623:
3624: 4.36 SequenceEqual
3625: 比较两个序列是否相等
3626: using System;
3627: using System.Linq;
3628:
3629: namespace DemoSequenceEqual1
3630: {3631: class Program
3632: {3633: static void Main(string[] args)
3634: {3635: string[] lst1 = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3636: string[] lst2 = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3637: string[] lst3 = { "乖巧人儿", "出云公主", "萧家二小姐", "霓裳公主" };3638:
3639: Console.WriteLine(string.Format("lst1 和 lst2 对比结果:{0}", lst1.SequenceEqual(lst2)));3640:
3641: Console.WriteLine(string.Format("lst1 和 lst3 对比结果:{0}", lst1.SequenceEqual(lst3)));3642:
3643: Console.ReadKey();
3644: }
3645: }
3646: }
3647:
3648: 4.37 使用自定义比较器比较两个序列是否相等
3649: using System.Collections.Generic;
3650: using System.Linq;
3651:
3652: namespace DemoSequenceEqual2
3653: {3654: /// <summary>
3655: /// 自定义string数组比较器
3656: /// </summary>
3657: public class MyEqualityComparer2<T> : IEqualityComparer<T>
3658: {3659: private string[] sec;
3660: public MyEqualityComparer2(string[] s)
3661: {3662: this.sec = s;
3663: }
3664:
3665: #region IEqualityComparer<T> 成员
3666:
3667: public bool Equals(T x, T y)
3668: {3669: string stmp = x as string;
3670:
3671: if (stmp != null)
3672: {3673: return sec.Contains(stmp);
3674: }
3675:
3676: return false;
3677: }
3678:
3679: public int GetHashCode(T obj)
3680: {3681: return obj.GetHashCode();
3682: }
3683:
3684: #endregion
3685: }
3686: }
3687:
3688: using System;
3689: using System.Linq;
3690:
3691: namespace DemoSequenceEqual2
3692: {3693: class Program
3694: {3695: static void Main(string[] args)
3696: {3697: string[] lst1 = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3698: string[] lst3 = { "乖巧人儿", "出云公主", "萧家二小姐", "霓裳公主" };3699:
3700: Console.WriteLine(string.Format("lst1 和 lst3 对比结果:{0}", lst1.SequenceEqual(lst3,3701: new MyEqualityComparer2<string>(lst3))));
3702:
3703: Console.ReadKey();
3704: }
3705: }
3706: }
3707:
3708: 4.38 First 第一个输出
3709:
3710: using System;
3711: using System.Linq;
3712:
3713: namespace DemoFirst1
3714: {3715: class Program
3716: {3717: static void Main(string[] args)
3718: {3719: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3720:
3721: var item = lst.First();
3722:
3723: Console.WriteLine(string.Format("数组的第一个元素:{0}", item));3724:
3725: Console.ReadKey();
3726: }
3727: }
3728: }
3729: using System;
3730: using System.Linq;
3731:
3732: namespace DemoFirst2
3733: {3734: class Program
3735: {3736: static void Main(string[] args)
3737: {3738: string[] lst = { "乖巧人儿", "霓裳公主", "萧家二小姐", "出云公主" };3739:
3740: var item = lst.First(str=>str.IndexOf("公主")>-1);3741:
3742: Console.WriteLine(string.Format("数组的第一个符合条件的元素:{0}", item));3743:
3744: Console.ReadKey();
3745: }
3746: }
3747: }
3748:
3749: 4.40 返回序列中第一元素,如果未找到,返回类型默认值
3750: FirstOrDefault
3751: using System;
3752: using System.Linq;
3753:
3754: namespace DemoFirstOrDefault1
3755: {3756: class Program
3757: {3758: static void Main(string[] args)
3759: {3760: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3761: int[] lst2 = { };3762:
3763: var item = lst.FirstOrDefault();
3764: var item2 = lst2.FirstOrDefault();
3765:
3766: Console.WriteLine(string.Format("lst数组的第一个元素:{0}", item));3767: Console.WriteLine(string.Format("lst2数组的第一个元素:{0}", item2));3768:
3769: Console.ReadKey();
3770: }
3771: }
3772: }
3773:
3774:
3775: using System;
3776: using System.Linq;
3777:
3778: namespace DemoFirstOrDefault2
3779: {3780: class Program
3781: {3782: static void Main(string[] args)
3783: {3784: int[] lst = { 10,20,30,40,50,100 };3785:
3786: var item = lst.FirstOrDefault(i => i==66);
3787:
3788: Console.WriteLine(string.Format("数组的第一个符合条件的元素:{0}", item));3789:
3790: Console.ReadKey();
3791: }
3792: }
3793: }
3794:
3795: 4.42 返回序列中最后一个元素 Last
3796: using System;
3797: using System.Linq;
3798:
3799: namespace DemoLast1
3800: {3801: class Program
3802: {3803: static void Main(string[] args)
3804: {3805: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3806:
3807: var item = lst.Last();
3808:
3809: Console.WriteLine(string.Format("数组的最后一个元素:{0}", item));3810:
3811: Console.ReadKey();
3812: }
3813: }
3814: }
3815:
3816: using System;
3817: using System.Linq;
3818:
3819: namespace DemoLast2
3820: {3821: class Program
3822: {3823: static void Main(string[] args)
3824: {3825: string[] lst = { "乖巧人儿", "霓裳公主", "萧家二小姐", "出云公主" };3826:
3827: var item = lst.Last(str => str.IndexOf("公主") > -1);3828:
3829: Console.WriteLine(string.Format("数组的最后一个符合条件的元素:{0}", item));3830:
3831: Console.ReadKey();
3832: }
3833: }
3834: }
3835:
3836:
3837: 4.44 LastOrDefault 方法
3838:
3839: using System;
3840: using System.Linq;
3841:
3842: namespace DemoLastOrDefault1
3843: {3844: class Program
3845: {3846: static void Main(string[] args)
3847: {3848: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3849: int[] lst2 = { };3850:
3851: var item = lst.LastOrDefault();
3852: var item2 = lst2.LastOrDefault();
3853:
3854: Console.WriteLine(string.Format("lst数组的最后一个元素:{0}", item));3855: Console.WriteLine(string.Format("lst2数组的最后一个元素:{0}", item2));3856:
3857: Console.ReadKey();
3858: }
3859: }
3860: }
3861:
3862: using System;
3863: using System.Linq;
3864:
3865: namespace DemoLastOrDefault2
3866: {3867: class Program
3868: {3869: static void Main(string[] args)
3870: {3871: int[] lst = { 10, 20, 30, 40, 50, 100 };3872:
3873: var item = lst.LastOrDefault(i => i == 66);
3874:
3875: Console.WriteLine(string.Format("数组的最后一个符合条件的元素:{0}", item));3876:
3877: Console.ReadKey();
3878: }
3879: }
3880: }
3881:
3882: 4.46 返回空序列的唯一元素Single
3883: using System;
3884: using System.Linq;
3885:
3886: namespace DemoSingle1
3887: {3888: class Program
3889: {3890: static void Main(string[] args)
3891: {3892: string[] lst = { "乖巧人儿" };3893: string[] lst2 = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3894:
3895: var item = lst.Single();
3896:
3897: try
3898: {3899: var itme2 = lst2.Single();
3900: }
3901: catch (Exception e)
3902: {3903: Console.WriteLine(string.Format("lst2应用Single方法出错:{0}", e.Message));3904: }
3905:
3906: Console.WriteLine(string.Format("\nlst数组的唯一元素:{0}", item));3907:
3908: Console.ReadKey();
3909: }
3910: }
3911: }
3912:
3913:
3914: using System;
3915: using System.Linq;
3916:
3917: namespace DemoSingle2
3918: {3919: class Program
3920: {3921: static void Main(string[] args)
3922: {3923: string[] lst = { "乖巧人儿", "霓裳公主", "萧家二小姐", "出云公主" };3924:
3925: var item = lst.Single(str => str.IndexOf("小姐") > -1);3926:
3927: try
3928: {3929: var item2 = lst.Single(str => str.IndexOf("公主") > -1);3930: }
3931: catch (Exception e)
3932: {3933: Console.WriteLine(string.Format("应用Single方法出错:{0}", e.Message));3934: }
3935:
3936: Console.WriteLine(string.Format("\n数组唯一符合条件的元素:{0}", item));3937:
3938: Console.ReadKey();
3939: }
3940: }
3941: }
3942:
3943:
3944: 4.48 SingleOrDefault
3945:
3946: using System;
3947: using System.Linq;
3948:
3949: namespace DemoSingleOrDefault1
3950: {3951: class Program
3952: {3953: static void Main(string[] args)
3954: {3955:
3956: string[] lst = { "乖巧人儿" };3957: int[] lst2 = { };3958: string[] lst3 = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };3959:
3960: var item = lst.SingleOrDefault();
3961: var item2 = lst2.SingleOrDefault();
3962:
3963: Console.WriteLine(string.Format("lst数组的第一个元素:{0}", item));3964: Console.WriteLine(string.Format("lst2数组的第一个元素:{0}", item2));3965:
3966: try
3967: {3968: var itme3 = lst3.Single();
3969: }
3970: catch (Exception e)
3971: {3972: Console.WriteLine(string.Format("\nlst3应用SingleOrDefault方法出错:{0}", e.Message));3973: }
3974:
3975:
3976: Console.ReadKey();
3977: }
3978: }
3979: }
3980: using System;
3981: using System.Collections.Generic;
3982: using System.Linq;
3983: using System.Text;
3984:
3985: namespace DemoSingleOrDefault2
3986: {3987: class Program
3988: {3989: static void Main(string[] args)
3990: {3991: int[] lst = { 10, 20, 30, 40, 50, 100, 50 };3992:
3993: var item = lst.SingleOrDefault(i => i == 66);
3994:
3995: Console.WriteLine(string.Format("数组的唯一符合条件的元素:{0}", item));3996:
3997: try
3998: {3999:
4000: var item2 = lst.SingleOrDefault(i => i == 50);
4001:
4002: }
4003: catch (Exception e)
4004: {4005: Console.WriteLine(string.Format("\n应用SingleOrDefault方法出错:{0}", e.Message));4006: }
4007:
4008:
4009:
4010: Console.ReadKey();
4011: }
4012: }
4013: }
4014:
4015:
4016: 4.50 ElementAt 获取指定索引处的元素
4017: using System;
4018: using System.Linq;
4019:
4020: namespace DemoElementAt
4021: {4022: class Program
4023: {4024: static void Main(string[] args)
4025: {4026: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4027:
4028: var item = lst.ElementAt(2);
4029:
4030: Console.WriteLine(string.Format("索引为2的元素:{0}", item));4031:
4032: try
4033: {4034: var itme2 = lst.ElementAt(4);
4035: }
4036: catch (Exception e)
4037: {4038: Console.WriteLine(string.Format("\n应用ElementAt方法出错:\n{0}", e.Message));4039: }
4040:
4041: Console.ReadKey();
4042: }
4043: }
4044: }
4045: 4.51 ElementAtOrDefault
4046: using System;
4047: using System.Linq;
4048:
4049: namespace ElementAtOrDefault
4050: {4051: class Program
4052: {4053: static void Main(string[] args)
4054: {4055: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4056: int[] lst2 = { 10, 100, 1000, 1000 };4057:
4058: var item = lst.ElementAtOrDefault(2);
4059: var itme2 = lst2.ElementAtOrDefault(4);
4060:
4061:
4062: Console.WriteLine(string.Format("索引为2的元素:{0}", item));4063: Console.WriteLine(string.Format("\n返回lst2的元素默认值:{0}", itme2));4064:
4065: Console.ReadKey();
4066: }
4067: }
4068: }
4069:
4070: 4.52 检测全部元素是否符合条件
4071: using System;
4072: using System.Linq;
4073:
4074: namespace DemoAll
4075: {4076: class Program
4077: {4078: static void Main(string[] args)
4079: {4080: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4081:
4082: bool p = lst.All(s => s.GetTypeCode() == TypeCode.String);
4083: bool p2 = lst.All(s => s.IndexOf("公主")>-1);4084:
4085: Console.WriteLine(string.Format("全部元素是否都是String类型:{0}", p));4086: Console.WriteLine(string.Format("\n全部元素是否都包含“公主”这个词:{0}", p2));4087: Console.ReadKey();
4088: }
4089: }
4090: }
4091:
4092: 4.53 Any 方法
4093:
4094: using System;
4095: using System.Linq;
4096:
4097: namespace DemoAny1
4098: {4099: class Program
4100: {4101: static void Main(string[] args)
4102: {4103: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4104: string[] lst2 = {};4105:
4106: bool p = lst.Any();
4107: bool p2 = lst2.Any();
4108:
4109: Console.WriteLine(string.Format("lst是否包含元素:{0}", p));4110: Console.WriteLine(string.Format("\nlst2是否包含元素:{0}", p2));4111: Console.ReadKey();
4112:
4113: }
4114: }
4115: }
4116:
4117: using System;
4118: using System.Linq;
4119:
4120: namespace DemoAny2
4121: {4122: class Program
4123: {4124: static void Main(string[] args)
4125: {4126: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4127:
4128: bool p = lst.Any(s => s.IndexOf("公主") > -1);4129: bool p2 = lst.Any(s => s.IndexOf("仙子") > -1);4130:
4131: Console.WriteLine(string.Format("是否有包含“公主”这个词的元素:{0}", p));4132: Console.WriteLine(string.Format("\n是否有包含“仙子”这个词的元素:{0}", p2));4133: Console.ReadKey();
4134: }
4135: }
4136: }
4137: 4.56 Contain 检测指定的元素是否存在
4138: using System;
4139: using System.Linq;
4140:
4141: namespace DemoContains1
4142: {4143: class Program
4144: {4145: static void Main(string[] args)
4146: {4147: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4148:
4149: bool p = lst.Contains("乖巧人儿");4150: bool p2 = lst.Contains("高丽公主");4151:
4152: Console.WriteLine(string.Format("是否有包含“乖巧人儿”这个元素:{0}", p));4153: Console.WriteLine(string.Format("\n是否有包含“高丽公主”这个元素:{0}", p2));4154: Console.ReadKey();
4155:
4156: }
4157: }
4158: }
4159: using System;
4160: using System.Linq;
4161: using DemoDistinct2;
4162:
4163: namespace DemoContains2
4164: {4165: class Program
4166: {4167: static void Main(string[] args)
4168: {4169: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主", "萧玉霜" };4170:
4171: bool p = lst.Contains("萧玉霜", new MyEqualityComparer<string>());4172:
4173: Console.WriteLine(string.Format("是否有包含“萧玉霜”这个元素:{0}", p));4174: Console.ReadKey();
4175: }
4176: }
4177: }
4178:
4179:
4180: 4.57 Count 方法获取序列元素的数量
4181: using System;
4182: using System.Linq;
4183:
4184: namespace DemoCount1
4185: {4186: class Program
4187: {4188: static void Main(string[] args)
4189: {4190: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4191:
4192: try
4193: {4194:
4195: int icount = lst.Count();
4196:
4197: Console.WriteLine("序列中元素数量为: {0} ",icount);4198:
4199: }
4200: catch (OverflowException)
4201: {4202: Console.WriteLine("序列中元素数量超过Int32类型的最大值。");4203: }
4204:
4205:
4206: Console.ReadKey();
4207:
4208: }
4209: }
4210: }
4211:
4212: 4.58 获取符合自定义条件的元素个数
4213: using System;
4214: using System.Linq;
4215:
4216: namespace DemoCount2
4217: {4218: class Program
4219: {4220: static void Main(string[] args)
4221: {4222: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4223:
4224: try
4225: {4226:
4227: int icount = lst.Count(str => str.IndexOf("公主") > -1);4228:
4229: Console.WriteLine("序列中元素数量为: {0} ", icount);4230:
4231: }
4232: catch (OverflowException)
4233: {4234: Console.WriteLine("序列中元素数量超过Int32类型的最大值。");4235: }
4236:
4237:
4238: Console.ReadKey();
4239:
4240: }
4241: }
4242: }
4243:
4244: 4.4.18 LongCount 获取一个Int64类型的元素数量
4245: using System;
4246: using System.Linq;
4247:
4248: namespace DemoLongCount1
4249: {4250: class Program
4251: {4252: static void Main(string[] args)
4253: {4254: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4255:
4256: long lcount = lst.LongCount();
4257:
4258: Console.WriteLine("序列中元素数量为: {0} ", lcount);4259:
4260: Console.ReadKey();
4261: }
4262: }
4263: }
4264: using System;
4265: using System.Linq;
4266:
4267: namespace DemoLongCount2
4268: {4269: class Program
4270: {4271: static void Main(string[] args)
4272: {4273: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4274:
4275: long lcount = lst.LongCount(str => str.IndexOf("公主") > -1);4276:
4277: Console.WriteLine("序列中元素数量为: {0} ", lcount);4278:
4279: Console.ReadKey();
4280: }
4281: }
4282: }
4283:
4284: 4.61 Aggregate 将序列元素进行累加
4285:
4286: using System;
4287: using System.Linq;
4288:
4289: namespace DemoAggregate3
4290: {4291: class Program
4292: {4293: static void Main(string[] args)
4294: {4295: string[] lst = { "出云公主", "乖巧人儿", "萧家二小姐", "霓裳公主" };4296: int[] ilst = { 10, 20, 30, 40, 50 };4297:
4298: string str = lst.Aggregate("林晚荣的客户有:", (s1, s2) =>4299: string.Format("{0}、{1}", s1, s2),4300: s => s.Remove(s.IndexOf("、"), 1));4301:
4302: string istr = ilst.Aggregate(50,
4303: (i1, i2) => i1 + i2,
4304: ii => string.Format("累加值:{0}", ii));4305:
4306: Console.WriteLine(str);
4307: Console.WriteLine(istr);
4308: Console.ReadKey();
4309: }
4310: }
4311: }
4312:
4313:
4314: using System;
4315: using System.Linq;
4316: using System.Text.RegularExpressions;
4317:
4318: namespace DemoCheckWord
4319: {4320: public partial class _Default : System.Web.UI.Page
4321: {4322: protected void Page_Load(object sender, EventArgs e)
4323: {4324: ///分割敏感词
4325: string[] wordlst = this.words.Text.Split(new char[]{(char)10,(char)13}, StringSplitOptions.RemoveEmptyEntries);4326: ///用户提交的数据
4327: string utext = this.UserText.Text.Replace("\n","<br>");4328: //敏感词掩码
4329: string wordmask = "*";
4330:
4331: if (this.Page.IsPostBack)
4332: {4333: //生成正则表达式
4334: string pattern = wordlst.Aggregate("(?is)", 4335: (w1, w2) => string.Format("{0}|{1}",w1, w2), 4336: str => str.Remove(str.IndexOf("|"), 1));4337:
4338: ///找出句子包含的敏感词
4339: var cw = from w in wordlst
4340: where utext.IndexOf(w) > -1
4341: select w;
4342:
4343: //包含的敏感词数量
4344: int icount = cw.Count();
4345:
4346: //合并过滤掉的的敏感词
4347: string strwd = cw.Aggregate("<b>包含的敏感词:</b>", 4348: (w1, w2) => string.Format("{0}、{1}", w1, w2), 4349: str => str.Remove(str.IndexOf("、"), 1));4350:
4351:
4352: //输出结果
4353: this.ShowText.Text = string.Format("<b>正则表达式:</b>{0}<br><b>过滤后的内容:</b><br>{1}<br>{2}<br><b>包含的敏感词数量:</b>{3}", pattern, Regex.Replace(utext, pattern, wordmask), strwd, icount);4354:
4355: }
4356: }
4357: }
4358: }
4359: