在foreach或GetEnumerator()中产生?

时间:2016-07-03 01:11:13

标签: c#

在这种情况下哪个更好:

IEnumerator<Cat> EnumerateCats()
{
    var rawCats = GetRawCats();

    foreach(var cat in rawCats)
    {
        var typedCat = new Cat
        {  
            Name = cat.Key;
            Breed = cat.Value;
        };

        yield return typedCat;
    }
}

IEnumerator<Cat> EnumerateCats()
{
    return GetRawCats()
       .Select(cat => new Cat
        {  
            Name = cat.Key;
            Breed = cat.Value;
        })
       .GetEnumerator();
}

我更喜欢上一个代码示例。它的工作方式与第一个相同吗?

3 个答案:

答案 0 :(得分:5)

我不确定你为什么需要返回IEnumerator<Cat>。我只是将其更改为返回IEnumerable<Cat>,因此您只需编写:

IEnumerable<Cat> EnumerateCats()
    => GetRawCats()
       .Select(cat => new Cat
        {  
            Name = cat.Key;
            Breed = cat.Value;
        });

答案 1 :(得分:0)

您可以看到使用function saveuserdata($userdata) {print_r($userdata); } 编写方法与在此示例中没有编写方法的区别

yield

这是输出:

static void Main(string[] args)
{
    foreach (int i in List())
    {
        Console.WriteLine($"In List foreach {i}");
    }
    Console.WriteLine("*****");
    foreach (int i in Yield())
    {
        Console.WriteLine($"In Yeild foreach {i}");
    }
}

private static IEnumerable<int> List()
{
    var inputList = new List <int> { 1, 2, 3 };
    List<int> outputlist = new List<int>();
    foreach (var i in inputList)
    {
        Console.WriteLine($"In List Method {i}");
        outputlist.Add(i);
    }
        return outputlist.AsEnumerable();
}

private static IEnumerable<int> Yield()
{
    var inputList = new List<int> { 1, 2, 3 };
    foreach (var i in inputList)
    {
        Console.WriteLine($"In Yield Method {i}");
        yield return i;
    }
}

答案 2 :(得分:-1)

使用yield语句可以减少内存使用量, 因为每次达到yield语句时调用都会返回。在回到调用者之前构建孔集合的另一种方式。

相关问题