问一个Foreach 循环Linq的问题

l2999019 2014-09-15 10:48:00
写法如下:

var item = from a in b select a

foreach(var i in item.tolist()){
//这里做一些操作
}

这种写法 foreach循环中会把item.tolist()执行多次么?
...全文
308 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Satroki 2014-09-15
  • 打赏
  • 举报
回复
引用 7 楼 l2999019 的回复:
嗯,..怎么证明他是缓存了的呢? = = ..好吧 我很纠结..
你在逐句调试也会看到后面只过一次,一种优化机制吧
l2999019 2014-09-15
  • 打赏
  • 举报
回复
引用 6 楼 sunny906 的回复:
不会。给你一个测试例子

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (int i in GetArr())
            {
                Console.WriteLine(i);
            }
        }

        private int[] GetArr()
        {
            List<int> list = new List<int>();
            for (int i = 1; i <= 10; i++)
            {
                list.Add(i);
            }
            Console.WriteLine("test");
            return list.ToArray();
        }

输出:
test
1
2
3
4
5
6
7
8
9
10
好的.. 谢谢..这个测试已经很详细了..
l2999019 2014-09-15
  • 打赏
  • 举报
回复
引用 4 楼 xyl2902 的回复:
引用 3 楼 xyl2902 的回复:
后面那句只会在一开始执行一次
foreach会缓存这个结果,直到结束循环
嗯,..怎么证明他是缓存了的呢? = = ..好吧 我很纠结..
sunny906 2014-09-15
  • 打赏
  • 举报
回复
不会。给你一个测试例子

        private void button1_Click(object sender, EventArgs e)
        {
            foreach (int i in GetArr())
            {
                Console.WriteLine(i);
            }
        }

        private int[] GetArr()
        {
            List<int> list = new List<int>();
            for (int i = 1; i <= 10; i++)
            {
                list.Add(i);
            }
            Console.WriteLine("test");
            return list.ToArray();
        }

输出:
test
1
2
3
4
5
6
7
8
9
10
蝶恋花雨 2014-09-15
  • 打赏
  • 举报
回复
item.tolist()是你存放的查询数据,有可能多,有可能少,剩下的你懂得。
Satroki 2014-09-15
  • 打赏
  • 举报
回复
引用 3 楼 xyl2902 的回复:
后面那句只会在一开始执行一次
foreach会缓存这个结果,直到结束循环
Satroki 2014-09-15
  • 打赏
  • 举报
回复
引用 2 楼 l2999019 的回复:
[quote=引用 1 楼 xyl2902 的回复:] 不会…………
不会的话 具体有什么解释呢? 或者原理.[/quote]后面那句只会在一开始执行一次
l2999019 2014-09-15
  • 打赏
  • 举报
回复
引用 1 楼 xyl2902 的回复:
不会…………
不会的话 具体有什么解释呢? 或者原理.
Satroki 2014-09-15
  • 打赏
  • 举报
回复
不会…………

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧