C#用foreach迭代时调用linq的执行顺序是什么?

veket 发布于 2012/07/10 10:34
阅读 1K+
收藏 0

 

这段代码中不用ToList()方法的执行顺序是什么?

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LINQ查询
{
    class Program
    {
        static void Main(string[] args)
        {
            var names = new List<string> {"Nino","Alberto","Juan","Mike","Phil" };
            var namesWithJ = from n in names where n.StartsWith("J") orderby n select n;
            Console.WriteLine("First iteration:");
            foreach(string name in namesWithJ)
            {
                Console.WriteLine(name);
            }
            Console.WriteLine();
            names.Add("Joho");
            names.Add("Jim");
            names.Add("Jack");
            names.Add("Denny");
            Console.WriteLine("Second iteration:");
            foreach(string name in namesWithJ)
            {
                Console.WriteLine(name);
            }
        }
    }
}

没有ToList()方法的输出结果

First iteration:
Juan

Second iteration:
Jack
Jim
Joho
Juan

为什么不会输出

First iteration:
Juan

Second iteration:

Juan
Jack
Jim
Joho
Juan

这个输出的执行过程是什么?求解答

加载中
0
卢小阳
卢小阳

这是因为List排序的问题导致的,不是你程序的执行顺序问题。而且list并不是按先过先出的顺序排序。先进先出有另外一个(名称叫什么忘记了),还有hashtable有是有排序问题的,hashtable是按key中的哈希值进行排序的,也会遇到你上面这样的顺序被打乱

0
卢小阳
卢小阳
你这个明显就是list用了它自己的字母排序
0
卢小阳
卢小阳
找到了
Stack  Stack<T>
  一般操作有3个,peek(),pop(),push(object),这是先进后出
Queue  Queue<T> 队列
  先进先出
返回顶部
顶部