linq-IEnumerable,IEnumerator
2020-12-13 16:47
标签:功能 try lin nts collect sealed 属性 gen val GetEnumerator方法 1. 因为有了这IEnumerable,IEnumerator接口,我们的集合才可以迭代,可以迭代,我们就可以使用select词法和select扩展方法 谁知道foreach的MSIL是什么??? .locals init ([0] class [mscorlib]System.Collections.Generic.List`1 var MyEnumerator = nums.GetEnumerator(); try Console.WriteLine(num); //foreach (var num in nums) 三:yield词法探索 了解词法之前,我们需要知道的一个类:Enumerator 这个类其实就是对list进行了一个封装,本质上所谓的movenext和current是对list进行的操作。 .class auto ansi sealed nested private beforefieldinit ‘ 其实 yield词法给我们生成的是一个和系统定义的 Enumerator 是具有一样的功能类。 linq-IEnumerable,IEnumerator 标签:功能 try lin nts collect sealed 属性 gen val 原文地址:https://www.cnblogs.com/Spinoza/p/11621637.html
一:linq基础必备IEnumerable,IEnumerator
linq查询必须的集合必须要实现这两个接口。
《1》 IEnumerable
《2》 Current 和MoveNext()属性, Reset方法
二:迭代的基础
2. foreach语法糖
《1》 深刻认识foreach这个语法糖
[1] class [mscorlib]System.Collections.Generic.List`1
[2] valuetype [mscorlib]System.Collections.Generic.List`1/Enumerator
[3] int32 num)
我们发现,多了一个临时变量,是一个Enumerator
var nums = new List
{
while (MyEnumerator.MoveNext())
{
var num = MyEnumerator.Current;
}
}
finally
{
MyEnumerator.Dispose();
}
//{
// Console.WriteLine(num);
//}
yield词法生成的MSIL代码:
extends [mscorlib]System.Object
implements class [mscorlib]System.Collections.Generic.IEnumerable`1
[mscorlib]System.Collections.IEnumerable,
class [mscorlib]System.Collections.Generic.IEnumerator`1
[mscorlib]System.IDisposable,
[mscorlib]System.Collections.IEnumerator
文章标题:linq-IEnumerable,IEnumerator
文章链接:http://soscw.com/essay/36470.html