您的位置:首页 > 其它

使用LINQ遇到的问题,请高手解答下原理

2008-06-12 21:15 204 查看
潜意识中知道这是IEnumerable的延迟特性造成的,但是硬要条条框框地从原理上解释还真发现自己不行,所以来问问高手们了,同时我想也可以作为一个较为典型的问题,供使用着LINQ的开发者注意一下

直接看题目吧:

首先有一个MyClass类,代码如下

public class MyClass

private static IEnumerable<MyClass> GetEnumerable()

private static IEnumerable<MyClass> GetList()

public static void Main(string[] args)

{

//第一种情况,使用Enumerable

IEnumerable<MyClass> ms = GetEnumerable();

Console.WriteLine("第一种情况:");

foreach (MyClass m in ms)

{

m.MethodA();

}

foreach (MyClass m in ms)

{

m.MethodB();

}

//第二种情况,虽然ms还是IEnumberable,但事实上对象是个List

ms = GetList();

Console.WriteLine("第二种情况:");

foreach (MyClass m in ms)

{

m.MethodA();

}

foreach (MyClass m in ms)

{

m.MethodB();

}

Console.Read();

}
对于每一种情况,都先执行MethodA使内部的i加上1,然后执行MethodB输出i

对于第二种情况,输出的是预期的2, 3, 4

而对于第一种情况,很遗憾,输出的是1, 2, 3

根据单步调试的结果, 事实上返回AsEnumerable()时,那个Select(i => new MyClass(i))每次foreach都要执行

还请高手说下原理,谢谢~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: