31 在LINQ查询中避免不必要的迭代

 

    class MyList : IEnumerable<Person>
    {
        List<Person> list = new List<Person>()
        {
            new Person() { Name = "Mike", Age = 25 },
            new Person() { Name = "Mike", Age = 30 },
            new Person() { Name = "Rose", Age = 25 },
            new Person() { Name = "Steve", Age = 30 },
            new Person() { Name = "Jessica", Age = 20 }
        };
        public int IteratedNum { get; set; }
        public Person this[int i]
        {
            get { return list[i]; }
            set { this.list[i] = value; }
        }
        public IEnumerator<Person> GetEnumerator()
        {
            foreach (var item in list)
            {
                IteratedNum++;
                yield return item;
            }
        }
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
    class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            MyList list = new MyList();
            var temp = (from c in list where c.Age == 20 select c).ToList();
            Console.WriteLine(list.IteratedNum.ToString());
            list.IteratedNum = 0;
            var temp2 = (from c in list where c.Age >= 30 select c).First();
            Console.WriteLine(list.IteratedNum.ToString());
            Console.ReadLine();
        }
    }

 

posted @ 2016-01-20 15:08  小-黑  阅读(90)  评论(0)    收藏  举报