我想知道当我调用方法或枚举方法的返回值时,枚举方法的IEnumerable参数,假设我们有以下代码:
IEnumerable<T> ProcessList(IEnumerable<T> list)
{
foreach(var element in list)
{
yield return ProcessElement(element);
}
}
我主要是好奇如何编写类似Where-Linq的扩展。
最佳答案
仅当枚举list
(enumerable
)的结果时,才会枚举ProcessList
(enum2
):
static void Main(string[] args)
{
var enumerable = Enum1();
Console.WriteLine("Enum1 retrieved");
var enum2 = Enum2(enumerable);
Console.WriteLine("Enum2 called");
foreach (var e in enum2)
{
Console.WriteLine(e);
}
}
private static IEnumerable<string> Enum1()
{
Console.WriteLine("Enum1");
yield return "foo";
}
private static IEnumerable<string> Enum2(IEnumerable<string> enumerable)
{
Console.WriteLine("Enum2");
foreach (var s in enumerable)
{
yield return s;
}
}
给出:
Enum1 retrieved
Enum2 called
Enum2
Enum1
foo
仅在进入
foreach
循环时才打印最后三行。关于c# - 在调用方法或枚举响应时枚举IEnumerable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27545673/