C#中的LINQ。为什么要使用IEnumerable<;T>;?

C#中的LINQ。为什么要使用IEnumerable<;T>;?,c#,linq,C#,Linq,我现在正在用C#学习LINQ。我看到的所有源代码都使用左手边的IEnumerable。为什么他们使用这个而不使用其他类型?因为所有集合都实现了IEnumerable,所以LINQ方法可以用于所有集合。LINQ设计用于对集合进行操作,所以他们可能选择使用IEnumerable接口,因为它是所有集合的通用接口集合类型。因为所有集合都实现了IEnumerable,所以LINQ方法可以用于所有集合。LINQ设计用于对集合进行操作,所以他们可能会选择使用IEnumerable接口,因为它是所有集合类型的通

我现在正在用C#学习LINQ。我看到的所有源代码都使用左手边的
IEnumerable
。为什么他们使用这个而不使用其他类型?

因为所有集合都实现了
IEnumerable
,所以
LINQ
方法可以用于所有集合。
LINQ
设计用于对集合进行操作,所以他们可能选择使用
IEnumerable
接口,因为它是所有集合的通用接口集合类型。

因为所有集合都实现了
IEnumerable
,所以
LINQ
方法可以用于所有集合。
LINQ
设计用于对集合进行操作,所以他们可能会选择使用
IEnumerable
接口,因为它是所有集合类型的通用接口。

定义
IEnumerable
是“公开一个枚举器,它支持对非泛型集合的简单迭代”-因为从查询中得到的通常是具有行(泛型数组)的特定类型的对象,所以使用
IEnumerable
来帮助迭代返回的数据更有意义


根据定义,
IEnumerable
是“公开一个枚举器,它支持对非泛型集合进行简单的迭代”——因为从查询中得到的通常是具有行(泛型意义上的数组)的特定类型的对象,使用
IEnumerable
帮助迭代返回的数据更有意义

有两个原因

  • IEnumerable
    是一个不能为其创建实例的接口。所以,它在左边
  • 在LINQ中枚举的所有资源都实现此接口
  • 此外,当您只想使用迭代器读取枚举,而不想对其进行任何修改时,也可以使用此选项。

    原因有二

  • IEnumerable
    是一个不能为其创建实例的接口。所以,它在左边
  • 在LINQ中枚举的所有资源都实现此接口

  • 此外,当您只想使用迭代器读取枚举,而不想对其进行任何修改时,也可以使用此选项。

    IEnumerable是一个接口,它告诉我们可以枚举一系列T实例。如果需要对集合中的每个对象执行某些操作,这是一个更好的选择

    根据MSDN

    公开枚举数,该枚举数支持对 非泛型集合


    我还建议您了解一下,IEnumerable是一个接口,它告诉我们可以枚举一系列T实例。如果需要对集合中的每个对象执行某些操作,这是一个更好的选择

    根据MSDN

    公开枚举数,该枚举数支持对 非泛型集合


    如果
    linq
    对对象执行的查询不会立即执行,我还建议您检查一下这个。执行被推迟到迭代以提高性能。也就是说当你这么做的时候

    var filtered = something.where(st=>st.data == mydata);
    

    编译器不会执行查询并检索对象。所以,对
    过滤的
    对象所能做的就是迭代。此时,其他操作(如添加、删除等)没有意义。而
    IEnumerable
    提供了完美的接口来实现这一目的

    linq
    的情况下,不会立即执行对对象执行的查询。执行被推迟到迭代以提高性能。也就是说当你这么做的时候

    var filtered = something.where(st=>st.data == mydata);
    
    编译器不会执行查询并检索对象。所以,对
    过滤的
    对象所能做的就是迭代。此时,其他操作(如添加、删除等)没有意义。而
    IEnumerable
    提供了完美的接口来实现这一目的