【问题标题】:Why do I need to convert a list to IEnumerable when the list is already iterable? [closed]当列表已经可迭代时,为什么我需要将列表转换为 IEnumerable? [关闭]
【发布时间】:2019-07-27 07:36:41
【问题描述】:

我了解 IEnumerable 和 IEnumerator 之间的区别。但我不太想什么时候应该将我的列表转换为 IEnumerable。列表不是已经可以迭代了吗?一些教程展示了 foreach 示例来解释 IEnumerable。但是列表的工作方式不也与 IEnumerable 完全相同吗?请告诉我!谢谢!

【问题讨论】:

  • IEnumerable<T> 是一个接口,List<T> 实现了它,所以不需要“转换”。你能举一个你问的例子吗?
  • 我猜这是“转换”和“转换”之间的误解。
  • 当您发布 * 一些教程展示了用于解释 IEnumerable* 的每个示例时,您实际上应该将它们链接起来,以便我们了解您的问题的一些背景信息。就您的问题而言,这是无法回答的。

标签: c# .net list ienumerable ienumerator


【解决方案1】:

List<T>IEnumerable<T>。数组也是如此,许多其他类也是如此。当我们说它是一个IEnumerable<T> 时,我们的意思是它实现了那个接口。

所以如果我有这个方法:

void PrintStringsToConsole(IEnumerable<string> strings)
{
    foreach(var s in strings)
    {
        Console.WriteLine(s);
    }
}

这些都可以。您无需转换任何内容。

var stringArray = new string[] {"a", "b", "c"};
PrintStringsToConsole(stringArray);

var stringList = new List<string> {"x", "y", "z"};
PrintStringsToConsole(stringList);

var hashSet = new HashSet<string> {"a","b","c"};
PrintStringsToConsole(hashSet);

var filteredList = stringList.Where(s => s != "a"); 
PrintStringsToConsole(filteredList);

【讨论】:

    【解决方案2】:

    大多数情况下,您不需要将 List 转换为 IEnumerable。我假设您正在谈论将 IEnumerable 类型指定为参数的方法签名,这只是该方法接受任何实现该接口的集合的一种方式,而不是为每种类型的集合显式声明覆盖.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 2021-04-27
      • 2013-12-21
      • 1970-01-01
      • 2021-11-26
      相关资源
      最近更新 更多