LINQ:为什么这个查询不适用于ArrayList?

Ben*_*nny 7 c# linq

public static  ArrayList   GetStudentAsArrayList()
{
    ArrayList  students = new ArrayList
    {
        new Student() { RollNumber = 1,Name ="Alex " , Section = 1 ,HostelNumber=1 },
        new Student() { RollNumber = 2,Name ="Jonty " , Section = 2 ,HostelNumber=2 }
    };
    return students;
}
Run Code Online (Sandbox Code Playgroud)

以下代码无法编译.错误是ArrayList is not IEnumerable

ArrayList lstStudents = GetStudentAsArrayList();
var res = from r in lstStudents select r;  
Run Code Online (Sandbox Code Playgroud)

这编译:

ArrayList lstStudents = GetStudentAsArrayList();
var res = from  Student   r in lstStudents select r;
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这两个片段之间的区别吗?为什么第二个有效?

p.c*_*ell 10

由于ArrayList允许您收集不同类型的对象,因此编译器不知道它需要操作什么类型.

第二个查询显式地将ArrayList中的每个对象强制转换为类型Student.

考虑使用List<>而不是ArrayList.


les*_*ode 8

在第二种情况下,您告诉LINQ该集合的类型是什么.ArrayList是弱类型的,所以为了在LINQ中有效地使用它你可以使用Cast<T>:

IEnumerable<Student> _set = lstStudents.Cast<Student>();
Run Code Online (Sandbox Code Playgroud)