初尝Linq,代码贴出来,有详细的注释

为了更加深入去理解,所以一开始就没说“如何使用Linq......”。今天只先看了拓展方法和lambda表达式,后续才会慢慢引入Linq,并深入去探究。知其然更知其所以然,是我一贯的学习风格。以下是代码部分。

Code:
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.ComponentModel;
  4. usingSystem.Data;
  5. usingSystem.Drawing;
  6. usingSystem.Linq;
  7. usingSystem.Text;
  8. usingSystem.Windows.Forms;
  9. usingSystem.Collections;
  10. namespaceLinqDemo
  11. {
  12. publicpartialclassForm1:Form
  13. {
  14. //定义一个委托
  15. publicdelegatestringdelTransfer(strings);
  16. publicForm1()
  17. {
  18. InitializeComponent();
  19. }
  20. ///<summary>
  21. ///初试牛刀
  22. ///</summary>
  23. ///<paramname="sender"></param>
  24. ///<paramname="e"></param>
  25. privatevoidbtnTry_Click(objectsender,EventArgse)
  26. {
  27. //找出数组arr中大于50的数,并打印出来
  28. #region没有Linq之前的这么做
  29. int[]arr={7,9,5,4,18,56,3,45,20,123,98};
  30. //ArrayListresult=newArrayList();
  31. //for(inti=0;i<arr.Length;i++)
  32. //{
  33. //if(arr[i]>50)
  34. //{
  35. //将>50的数存放在result动态数组中
  36. //result.Add(arr[i]);
  37. //}
  38. //}
  39. //遍历该动态数组
  40. //for(inti=0;i<result.Count;i++)
  41. //{
  42. //Console.WriteLine(result[i]);
  43. //}
  44. #endregion
  45. #region有了Linq之后这样迭代
  46. IEnumerableie=arr.Select(p=>p).Where(p=>p>50);
  47. IEnumeratorresult=ie.GetEnumerator();
  48. while(result.MoveNext())
  49. {
  50. Console.WriteLine(result.Current);
  51. }
  52. #endregion
  53. }
  54. ///<summary>
  55. ///调用拓展方法
  56. ///</summary>
  57. ///<paramname="sender"></param>
  58. ///<paramname="e"></param>
  59. privatevoidbtnExtraMethod_Click(objectsender,EventArgse)
  60. {
  61. strings="abcdefg";
  62. Console.WriteLine(s.ToLower());
  63. Console.WriteLine(s.ToUpper());
  64. //调用拓展方法--》拓展方法是一种特殊的静态方法
  65. Console.WriteLine(s.toPascal());
  66. }
  67. //引入Lambda表达式,Linq中大部分都是Lambda表达式,拓展方法
  68. privatevoidbtnLambda_Click(objectsender,EventArgse)
  69. {
  70. //在.netframeWork1.0中,使用委托
  71. //delTransferdel=newdelTransfer(toPascal);//关联并给委托赋值
  72. //Console.WriteLine(del("abcdefg"));//调用委托,调用相对应的方法
  73. //在.netframwork2.0中,使用匿名方法
  74. //delTransfertrans=delegate(strings){returns.Substring(0,1).ToUpper()+s.Substring(1).ToLower();};
  75. //Console.WriteLine(trans("abcdefg"));
  76. //在.netframwork3.5中,使用Lambda表达式
  77. delTransfertrans=s=>s.Substring(0,1).ToUpper()+s.Substring(1).ToLower();
  78. Console.WriteLine(trans("abcdefg"));
  79. }
  80. ///<summary>
  81. ///将字符串参数的首字符大写,后面的字母全部小写
  82. ///</summary>
  83. ///<paramname="s"></param>
  84. ///<returns></returns>
  85. publicstringtoPascal(strings)
  86. {
  87. returns.Substring(0,1).ToUpper()+s.Substring(1).ToLower();
  88. }
  89. ///<summary>
  90. ///体验Linq中的拓展方法--Select
  91. ///</summary>
  92. ///<paramname="sender"></param>
  93. ///<paramname="e"></param>
  94. privatevoidbtnSelect_Click(objectsender,EventArgse)
  95. {
  96. List<string>list=newList<string>();
  97. list.Add("丁浪");
  98. list.Add("艳刘");
  99. list.Add("王五");
  100. list.Add("李四");
  101. list.Add("张三");
  102. list.Add("王兴魁");
  103. //varreslut=list.Select(p=>p);//查询出所有对象
  104. Console.WriteLine(double.MaxValue);
  105. //查出以“丁”开头的对象并打印
  106. //varreslut=list.Select(p=>p).Where(p=>p.StartsWith("丁"));
  107. inta=0;
  108. strings=a>=0?"a是正整数":"a是负数";
  109. Console.WriteLine(s);
  110. //按姓氏排序
  111. //varreslut=list.Select(p=>p).OrderBy(p=>p.Substring(0,1));
  112. //reslut.print();
  113. //按“姓氏”分组
  114. varreslut=list.Select(p=>p).GroupBy(p=>p.Substring(0,1));
  115. foreach(variteminreslut)
  116. {
  117. Console.WriteLine("/n-------------------------------/n");
  118. Console.WriteLine("本组人都是姓"+"/'"+item.Key+"/'"+"的");
  119. foreach(varnameinitem)
  120. {
  121. Console.WriteLine("姓"+"/'"+item.Key+"/'"+"的有:"+name);
  122. }
  123. Console.WriteLine("/n-------------------------------/n");
  124. }
  125. }
  126. }
  127. ///<summary>
  128. ///拓展类,拓展方法
  129. ///</summary>
  130. publicstaticclassExtraClass
  131. {
  132. //加this关键字,表明为该类型(string)添加了拓展方法
  133. publicstaticstringtoPascal(thisstringstr)
  134. {
  135. //将字符串参数的首字符大写,后面的字母全部小写
  136. returnstr.Substring(0,1).ToUpper()+str.Substring(1).ToLower();
  137. }
  138. publicstaticvoidprint(thisIEnumerable<string>ie)
  139. {
  140. IEnumerator<string>result=ie.GetEnumerator();
  141. while(result.MoveNext())
  142. {
  143. Console.WriteLine("/n-------------------------------/n");
  144. Console.WriteLine(result.Current);
  145. Console.WriteLine("/n-------------------------------/n");
  146. }
  147. }
  148. }
  149. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值