我期待的字符串中包含“i”但结果为空。你能告诉我原因吗?
PetOwner [] petOwners = {new PetOwner {Name =“sen”,Pets = new List {“puppy”,“tiger”}},
新的PetOwner {Name =“sugu”,Pets = new List {“jimmy”,“rose”}}
};
var pets = petOwners.SelectMany(p => p.Pets);
var pets1 = pets.TakeWhile<string>(s => { Console.WriteLine(s); return s.Contains("i"); });
答案 0 :(得分:3)
不要使用TakeWhile
- 它会在遇到表达式返回false的元素时立即终止循环。请改用Where
。也只是使用普通的foreach循环来执行输出,而不是将调用WriteLine放在lambda函数中。这使您更容易理解您的代码。
var petsContainingI = petOwners.SelectMany(p => p.Pets).Where(s => s.Contains("i"));
foreach (string s in petsContainingI)
{
Console.WriteLine(s);
}