日期:2014-05-16  浏览次数:20802 次

请看下这个Linq表达式

static void Main(string[] args)
{

    List<int> list = new List<int>() { 1,5,6,9,8,2,3 };
    var list2 = from a in list
                where a > 5
                select a;
    List<int> list3 = list2 as List<int>;
    Console.WriteLine(list3 == null);
    Console.ReadKey();
}


上面的代码中,查找集合中大于5的元素,已经使用了Linq表达式。
但是,最后把结果转换成List<int>类型的时候,为什么转换成功呢?
为什么list3为null呢?
------解决方案--------------------
 应该这么写List<int> list3 = list2.ToList();
Linq查询表达式返回的结果是IEnumerable<T>
------解决方案--------------------


 var list2 = list.Where(o=>o>5).ToList(); 这不更简短么
 List<int> list3 = list2;

------解决方案--------------------
var 只是为了简便语法而不写出真实的类型,当你打出变量名的时候应该可以从自动提示中知道真实类型。
as 操作符只有在父子类型之间才能转换成功。
------解决方案--------------------
因为list2是IEnumerable<int>,不是List<int>,类型不同as转换出来就是null。