在这种情况下哪个更好:
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();
}
我更喜欢上一个代码示例。它的工作方式与第一个相同吗?
答案 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语句时调用都会返回。在回到调用者之前构建孔集合的另一种方式。