请看下这个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。