我想知道当我调用方法或枚举方法的返回值时,枚举方法的IEnumerable参数,假设我们有以下代码:

IEnumerable<T> ProcessList(IEnumerable<T> list)
{
    foreach(var element in list)
    {
        yield return ProcessElement(element);
    }
}


我主要是好奇如何编写类似Where-Linq的扩展。

最佳答案

仅当枚举listenumerable)的结果时,才会枚举ProcessListenum2):

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/

10-10 16:24