IEnumerable:它在OOP的背景下是什么意思

Edw*_*rds 6 .net ienumerable

请考虑以下代码:

public class Person
(
    public string FirstName {get; set;}
    public string LastName  {get; set;}
    Public int Age  {get; set;}
}

IEnumerable <Person> people;
Run Code Online (Sandbox Code Playgroud)

我在许多程序中也看到了类似的<IQueryable>含义?

这是什么意思IEnumerable<Person>

Ant*_*nes 4

IEnumerable<T>

一组事物可以以多种不同的方式存储,在列表中,在数组中,在数据库中等。这些存储机制的一个共同点是所保存的一组事物可以是枚举的,即每个可以使用诸如foreach例如的 ​​语言构造来依次访问一个。

该接口表示所有事物IEnumerable<T>集的持有者都必须启用枚举的公共接口。因此,表示一个允许枚举一组对象的接口,而无需具体说明这些对象的实际存储方式。IEnumberable<PersonPerson

IQueryable<T>

这是 LINQ 的扩展,IEnumerable<T>但代表了 LINQ 特有的东西。在 LINQ 中,您可以指定一个可以过滤和转换一组(或多组)项目的查询。相对于纯粹的IEnumerable<T>接口,这被称为 LINQ to Objects,其中查询的每个阶段最终都是对扩展方法的简单调用。

然而,针对实现事物的对象IQueryable<T>可能会更加复杂。对象实现可以与不同的 LINQ提供程序IQueryable<T>相关联,该提供程序可以以不同的方式实现 LINQ 查询的执行。例如,可以通过与 LINQ-To-SQL 提供程序关联的类型来实现。在这种情况下,LINQ 查询将转换为 T-SQL 查询,然后针对数据库执行以获取一组项目(结果不一定是一组对象)。IQueryable<Person>Person