c# in deep 之对Linq表达式范围变量限制问题的一些解决办法

  linq表达式的标准形式为from...where...select,其中from后面跟的就是范围变量。linq中范围变量需要是泛型的集合,假如我们想对ArrayList或Object[]进行处理,linq就无能为力了。解决这种弱类型集合问题可以用两种方法:Cast和OfType。下面用一个实例进行演示。

    ArrayList list = new ArrayList { "First", "Second", "third" };
            IEnumerable<string> strings=list.Cast<string>();
            foreach (string item in strings)
            {
                Console.WriteLine(item);
            }

            list = new ArrayList { 1, "not a int", 2, 3 };
            IEnumerable<int> ints = list.OfType<int>();
            foreach (int item in ints)
            {
                Console.WriteLine(item);
            }

  下面我们调用显式类型的范围变量来自动调用Cast

    ArrayList list = new ArrayList { "First", "Second", "third" };
            var strings = from string entry in list select entry.Substring(0, 3);

    foreach (string item in strings)
            {
                Console.WriteLine(item);
            }

  这样我们就可以快速的将集合转换成泛型进行处理了。

 

 

 

 

 

 

posted @ 2013-10-11 11:04  蚂蚁拉车  阅读(572)  评论(1编辑  收藏  举报