Browse Source

foreach内部原理

master
QYYEE 5 years ago
parent
commit
e4dcc421d3

+ 10
- 0
后端/C#基础/IQueryable.md View File

@@ -0,0 +1,10 @@
1
+> IQueryable
2
+- IQueryable只存贮条件,不立即运行
3
+- LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:
4
+   - Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展;
5
+   - Queryable类,针对继承了IQueryable<T>接口的集合进行扩展
6
+     - 所有对于IEnumerable的过滤,排序等操作,都是在内存中发生的。也就是说数据已经从数据库中获取到了内存中,只是在内存中进行过滤和排序操作。
7
+     - 所有对于IQueryable的过滤,排序等操作,只有在数据真正用到的时候才会到数据库中查询。这也是Linq的延迟加载核心所在。
8
+
9
+- where条件接收表达式,返回IQueryable接口
10
+- IQueryable表达式分为三个项,第一个是查询数据的表达式,第二个是元素类型,第三个是:查询数据Provider,每次我们需要取出集合里面的数据的话,Provider都回去解析查询数据的表达式,解析完之后再去数据库将数据取出来,传递给集合使用

+ 13
- 0
后端/C#基础/distinct用法.md View File

@@ -0,0 +1,13 @@
1
+对一个可枚举的对象集合进行去重操作时,一般第一个想到的就是就是Linq的Distinct方法。
2
+> Enumerable.Distinct 方法
3
+ 
4
+ 是常用的LINQ扩展方法,属于System.Linq的Enumerable方法,可用于去除数组、集合中的重复元素,还可以自定义去重的规则。
5
+ > 值类型元素集合去重
6
+ - List<int> list = new List<int> { 1, 1, 2, 2, 3, 4, 5, 5 };
7
+list.Distinct().ToList().ForEach(s => Console.WriteLine(s));执行结果:12345
8
+
9
+-  Distinct()方法的返回集合类型是一个接口,不是具体的集合,所以需要用一个ToList()。
10
+
11
+我们对对象集合使用Distinct方法时要使用重载Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer);
12
+
13
+要使用这个方法,我们得重写IEqualityComparer接口,再使用Distinct方法

+ 4
- 1
后端/C#基础/foreach内部运作原理.md View File

@@ -11,4 +11,7 @@
11 11
    - type :identifier 的类型。 
12 12
    - identifier 表示集合元素的迭代变量。如果迭代变量为值类型,则无法修改的只读变量也是有效的
13 13
    - expression 对象集合或数组表达式。集合元素的类型必须可以转换为 identifier 类型。不要使用计算为 null 的表达式。
14
-   - statement 要执行的嵌入语句。
14
+   - statement 要执行的嵌入语句。
15
+
16
+
17
+- foreach循环用于列举出集合中所有的元素,foreach语句中的表达式由关键字in隔开的两个项组成。in右边的项是集合名,in左边的项是变量名,用来存放该集合中的每个元素。

+ 14
- 0
后端/C#基础/readonly和const.md View File

@@ -0,0 +1,14 @@
1
+>readonl(运行时常量)与const(编译时常量)
2
+- readonly为**运行时常量**,程序运行时进行赋值,赋值完成后便无法更改,可称其为只读变量。
3
+- const为**编译时常量**,程序编译时将对常量值进行解析,并将所有常量引用替换为相应值
4
+
5
+> 声明及初始化
6
+- readonly常量只能声明为类字段,支持实例类型或静态类型,可以在声明的同时初始化或者在构造函数中进行初始化,初始化完成后便无法更改。
7
+- const常量除了可以声明为类字段之外,还可以声明为方法中的局部常量,默认为静态类型(无需用static修饰,否则将导致编译错误),但必须在声明的同时完成初始化。
8
+
9
+> readonly什么时候用
10
+- readonly用于字段,意思是:字段只能在初始化时候赋值,在随后的使用中,字段的值不能再改变。
11
+- readonly修饰的字段,其初始化仅是固定了其引用(地址不能修改),但它引用的对象的属性是可以更改的。
12
+
13
+大胆使用readonly,为了值不再被赋值。
14
+

Loading…
Cancel
Save