瀏覽代碼

wiki-Lamda表达式

master
QYYEE 5 年之前
父節點
當前提交
18475bd425
共有 3 個檔案被更改,包括 80 行新增5 行删除
  1. 14
    0
      后端/C#基础/foreach内部运作原理.md
  2. 二進制
      后端/C#基础/imgs/操作符.jpg
  3. 66
    5
      后端/C#基础/lamda表达式.md

+ 14
- 0
后端/C#基础/foreach内部运作原理.md 查看文件

@@ -0,0 +1,14 @@
1
+> foreach原理
2
+- 实现了一个IEnumerable接口
3
+
4
+> 针对集合类型foreach遍历
5
+我们每次针对集合类型编写foreach代码块,都是在使用迭代器
6
+这些集合类型都实现了IEnumerable接口
7
+都有一个GetEnumerator方法
8
+
9
+> foreach结构
10
+- foreach (type identifier in expression) statement 
11
+   - type :identifier 的类型。 
12
+   - identifier 表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的
13
+   - expression 对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。不要使用计算为 null 的表达式。
14
+   - statement 要执行的嵌入语句。

二進制
后端/C#基础/imgs/操作符.jpg 查看文件


+ 66
- 5
后端/C#基础/lamda表达式.md 查看文件

@@ -1,6 +1,3 @@
1
-
2
->Lambda表达式
3
-
4 1
 在掌握Lambda表达式掌握几个概念。
5 2
 >泛型
6 3
 - 什么是泛型
@@ -17,7 +14,71 @@
17 14
    - 泛型结构:struct Name<T>{}
18 15
 
19 16
    - 泛型委托:public delegate void Name<T>(T param);
20
-  
17
+- 数组、List和ArrayList的区别:
18
+    - 数组
19
+      - 在内存中是连续存储的,所以它的索引速度是非常的快,赋值与修改元素很简单
20
+      - 不足:(1)在数组的两个数据间插入数据也是很麻烦的;(2)声明数组时必须定义数组长度;数组过长会造成内存浪费,数组过短会造成数据溢出。
21
+    - 集合ArrayList:
22
+      - (1)ArrayList并非类型安全,(2)遍历ArrayList资源消耗大
23
+      - 装箱(boxing,指将值类型转换为引用类型)和拆箱(unboxing,指将引用类型转换为值类型)
24
+    - 泛型List:
25
+      -(1)类型安全,通过允许指定泛型类或方法操作的特定类型,泛型功能将类型安全的任务转移给了编译器。不需要编写代码来检测数据类型是否正确,因为会在编译时强制使用正确的数据类型。减少了类型强制转换的需要和运行时错误的可能性。(2)减少开销,泛型提供了类型安全但没有增加多个实现的开销。
26
+>扩展方法
27
+ 
28
+ 下面图片扩展方法都是针对IEnumerable的对象进行扩展的也就是说,只要实现了IEnumerable接口,就可以使用这些扩展方法。
29
+      ![](./imgs/操作符.jpg)
30
+
31
+>过滤操作符
32
+- Where:根据返回bool值的Func委托参数过滤元素。
33
+-  OfType<TResult>:接收一个非泛型的IEnumerable集合,根据OfType泛型类型参数过滤元素,只返回TResult类型的元素。
34
+- Distinct:删除序列中重复的元素。
35
+
36
+>6.量词操作符
37
+- 如果元素序列满足指定的条件,量词操作符就返回布尔值。
38
+- 1)Any:确定序列是否包含任何元素;或确定序列中的任何元素是否都满足条件。
39
+- 2)All:确定序列中的所有元素是否满足条件。
40
+- 3)Contains:确定序列是否包含指定的元素。
41
+
42
+
21 43
 > 委托
44
+- 委托就是动态调用方法 
45
+
46
+
22 47
 > 事件
23
-Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
48
+- 事件(Event)是类或对象向其他类或对象通知发生的事情的一种特殊签名的委托.
49
+  
50
+
51
+> Lambda表达式
52
+- Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。
53
+- 例如DXKSH中的一个例子
54
+  ```
55
+  List<string> macs=await _projectDbContext.RealtimeDatas.Where(t => t.DianXiangId == request.DianXiangId)
56
+  .OrderByDescending(t=>t.Sort)//排序
57
+  .Select(t => t.mac).Distinct().ToListAsync();//去掉重复的mac号
58
+  ```
59
+- 查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成
60
+- Lambda表达式的运算符即为=>。表达式形式:(Input Param)=>Expression。在表达式**左侧的表示输入参数**,**右侧的为相应的运算语句或者判断语句**等,可包含函数调用等复杂方式。运算符=>读作为goes to
61
+
62
+> 在List集合中Lambda表达式的使用
63
+- 此时举个例子
64
+```
65
+1)、studentList对象:List集合,集合中的对象为学生实体Student。此集合中存放着整个学校学生的信息
66
+2)、scoreList对象:集合中的对象是成绩实体Score,此集合中存放着为学生的成绩信息
67
+3)、Student实体:包含下列几个属性,StudentName,StudentCode,ClassCode,ClassName,BirthDay,Grade
68
+4)、Score实体:包含下列几个属性,StudentCode,SubjectName(科目名称),ScoreValue(分数,0-100的数字)。一个学生可能有多门成绩数据存放在此。
69
+```
70
+
71
+ (1)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储
72
+ ```
73
+  var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);
74
+  ```
75
+(2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。
76
+```
77
+var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);
78
+OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。
79
+
80
+ var h = studentList.Select(t => t.StudentName).Distinct();//获取所有的学生姓名,并去除重名
81
+```
82
+
83
+
84
+

Loading…
取消
儲存