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

问题描述 投票:-4回答:2

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

c# .net list ienumerable ienumerator
2个回答
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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.