为什么我在.ToList()之后无法访问Count属性

时间:2012-07-20 12:54:29

标签: linq list ienumerable

我有这段代码:

var numbers = new []{ 1,2,3 };
IEnumerable<int> evenNumbers = numbers.Where(i=> i % 2 == 0);

现在我把这个“集合”变成一个List:

evenNumbers = evenNumbers.ToList();

为什么我现在只能evenNumbers.Count()而不是evenNumbers.Count

使用:

IList<int> evenNumbers = numbers.Where(i=> i % 2 == 0).ToList();

我可以。不会'evenNumbers = evenNumbers.ToList();将IEnumerable实现为List吗?

2 个答案:

答案 0 :(得分:1)

对于您的编译器,evenNumbers仍然是IEnumerable类型。你的编译器不知道它实际上是一个List。如果为其分配派生类型的对象,则变量的类型“evenNumbers”不会更改。

答案 1 :(得分:1)

分配后,

evenNumbers变量仍为IEnumerable<int>。您应该创建一个新的变量类型IList<int>List<int>来使用Count属性,因为它是在IList<T>接口中定义的。这就是你在第二次任务中所做的。