我了解IEnumerable和IEnumerator之间的区别。但是我没有想到何时将列表转换为IEnumerable。列表是否已经可以迭代?一些教程显示了foreach示例来解释IEnumerable。但是,列表不是也可以与IEnumerable完全一样地工作吗?请告诉我!谢谢!
答案 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类型指定为参数的方法签名,并且它只是该方法接受实现接口的任何集合的一种方式,而不是为每种类型的集合显式声明重写