【问题标题】:C# IEnumerable and IList difference [duplicate]C# IEnumerable 和 IList 的区别
【发布时间】:2022-03-04 05:35:45
【问题描述】:
    private static void Main(string[] args)
    {
        var query = Data();
    }

    private static IList<Employee> Data()
    {
        List<Employee> list = new List<Employee>();
        list.Add(new Employee { Name = "test0", Age = 19 });
        list.Add(new Employee { Name = "test1", Age = 33 });
        list.Add(new Employee { Name = "test2", Age = 25 });
        return list;
    }

    private static IEnumerable<Employee> Data()
    {
        List<Employee> list = new List<Employee>();
        list.Add(new Employee { Name = "test0", Age = 19 });
        list.Add(new Employee { Name = "test1", Age = 33 });
        list.Add(new Employee { Name = "test2", Age = 25 });
        return list;
    }

当我运行上面的代码时,我在输入结果时没有看到任何不同的结果 IEnumerable 或 IList。两者使用有什么不同吗?如何决定使用哪种类型?

【问题讨论】:

  • 一般来说,最好使用最通用的类​​型作为输入:因此,接受IEnumerable&lt;T&gt; 是一个参数比接受List&lt;T&gt; 更好。另外,IEnumerable&lt;T&gt; 不允许被调用者更改集合,这从调用者的角度来看也很好。
  • 欢迎来到 Stack Overflow。在提出这样的问题之前,您应该通过搜索已经提出的问题来进行一些研究,以查看您的问题是否已经有答案。查看Help Centre关于提问
  • 看看这个link。这对这个问题有非常清楚的解释
  • 一般来说,在私有方法中,出于性能原因,最好使用最具体的类型作为返回类型,在本例中为List&lt;Employee&gt;。例如,它们都允许您在结果上使用foreach,但是当返回List&lt;Employee&gt; 时,foreach 将是最有效的。您还可以使用列表的所有功能,而无需强制转换。即使它没有帮助,它也没有伤害,无论如何它是一个private 方法。

标签: c#


【解决方案1】:

IList 继承自 IEnumerable,因此它们本质上是相同的,只是 IList 具有额外的功能。

这取决于您在创建数据后如何处理该数据,以确定您是否应该使用IEnumerable 或IList。

IEnumerable 很好,如果您只想将集合内容作为其只读内容进行迭代。

IList 允许添加和删除内容(ICollection 也是如此)并允许直接访问具有索引的元素

【讨论】:

  • 您好,能否给出一些使用 IEnumerable 和 IList 显示差异的示例? TQ。
  • @nettium 希望提供更清晰的信息。因此,如果您使用 IEnummerable,您将无法通过索引使用添加、删除或引用,如果您使用列表,您将无法使用。因此,它取决于您在创建该集合后对它执行的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 2011-06-25
  • 2011-10-25
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多