当列表已经可迭代时,为什么需要将列表转换为IEnumerable?

时间:2019-03-05 18:45:35

标签: c# .net list ienumerable ienumerator

我了解IEnumerable和IEnumerator之间的区别。但是我没有想到何时将列表转换为IEnumerable。列表是否已经可以迭代?一些教程显示了foreach示例来解释IEnumerable。但是,列表不是也可以与IEnumerable完全一样地工作吗?请告诉我!谢谢!

2 个答案:

答案 0 :(得分:3)

一个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);

答案 1 :(得分:1)

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