我理解IEnumerable和IEnumerator之间的区别。但我还没想到什么时候应该将我的列表转换为IEnumerable。列表是否已经可迭代?一些教程显示了解释IEnumerable的foreach示例。但是,列表的工作方式与IEnumerable完全相同吗?请告诉我!谢谢!
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);
大多数情况下,您不需要将List转换为IEnumerable。我假设您正在讨论将IEnumerable类型指定为参数的方法签名,并且它仅仅是方法接受实现接口的任何集合的方式,而不是为每种类型的集合显式声明覆盖。