1

我有这个代码:

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 物化为列表吗?

4

2 回答 2

1

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

于 2012-07-20T13:01:50.977 回答
1

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

于 2012-07-20T13:02:15.167 回答