我想了解IEnumerator的收益率回報。在嘗試下面的簡單例子之後,我發現鏈中的最後一個方法首先執行。我並不期待。收益率返回改變鏈接調用方法的順序
public static void Example()
{
List<Pet> pets =
new List<Pet>{ new Pet { Name="Barley", Age=8 },
new Pet { Name="Boots", Age=4 }
};
var p1 = pets.ReturnPetAgeGreatThan2().ReturnPetAgeGreatThan4();
foreach (var p in p1)
{
// Removed it to keep it simple
//Console.WriteLine("Pet Name:{0},Age:{1}", p.Name, p.Age);
}
Console.ReadLine();
}
public static IEnumerable<Pet> ReturnPetAgeGreatThan2(this IEnumerable<Pet> p)
{
Console.WriteLine("I am in ReturnPetAgeGreatThan2");
foreach (var par in p)
{
if (par.Age > 2)
yield return par;
}
}
public static IEnumerable<Pet> ReturnPetAgeGreatThan4(this IEnumerable<Pet> p)
{
Console.WriteLine("I am in ReturnPetAgeGreatThan4");
foreach (var par in p)
{
if (par.Age > 4)
yield return par;
}
}
}
輸出
I am in ReturnPetAgeGreatThen4
I am in ReturnPetAgeGreatThen2
但只要我刪除產量的回報,並更改功能,只使用return.The方法的調用秩序。
public static IEnumerable<Pet> ReturnPetAgeGreatThan2(this IEnumerable<Pet> p)
{
Console.WriteLine("I am in ReturnPetAgeGreatThen2");
var result = p.Where(x => x.Age > 2);
return result;
}
public static IEnumerable<Pet> ReturnPetAgeGreatThan4(this IEnumerable<Pet> p)
{
Console.WriteLine("I am in ReturnPetAgeGreatThen4");
var result = p.Where(x => x.Age > 4);
return result;
}
輸出
I am in ReturnPetAgeGreatThen2
I am in ReturnPetAgeGreatThen4
任何幫助瞭解這將是大加讚賞。