使用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都要执行
还请高手说下原理,谢谢~
直接看题目吧:
首先有一个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都要执行
还请高手说下原理,谢谢~
相关文章推荐
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- 最近遇到一个问题,哪位高手能帮忙解答一下
- ------------------SQL2005使用中遇到的问题及解答-----------------------
- 今天写链表时候遇到的问题,请高手解答一下
- VS2008下使用Linq To Entity的Skip().Take()分页查询时遇到数据结果不对的问题
- 浅谈使用Linq to sharepoint时可能遇到的2个问题
- 使用Linq 更新数据库时遇到的一些问题及解决办法
- 滚动条原理分析(在使用纯C + API画列表及列表的滚动条时遇到的问题)
- 使用Linq查询数据进行分页时遇到的性能问题
- 使用flask的时候遇到的问题及其解答
- 【坑】【未解答】使用canvas中的arcTo绘制圆角矩形遇到的问题
- 用JSP连接SQL时遇到的问题---求高手解答
- 开发时遇到使用LINQ无法进行数据插入时的问题
- 关于SQL2005使用中遇到的问题及解答
- Sliverlight使用HTTP POST服务器出现的问题,求高手解答
- win8系统使用时遇到的常见问题汇总及解答
- myeclipse中使用debug时遇到的一个小问题
- Delphi结构中使用String时遇到的内存泄露问题
- spring4中@value在子父容器中使用时遇到的问题