[英]Generate prime number sequences, Loop Break vs LINQ TakeWhile
[英]Linq TakeWhile in loop, giving only first result
我在循环中使用了takewhile语句,它仅在循环的第一次迭代中给出结果。 所有后续迭代都不会产生结果,即使我希望它们能够产生结果。
例如下面的代码。 第一次迭代将给出字符串a =“ blah1blah2blah3”。 在第二次迭代中,我期望a =“ blah2blah3”,但是需要的时间却没有给出a =“”,它没有任何元素。
在现实世界中,这是一个很大的逻辑循环,因此我无法承担超出循环的时间。 我试过使用count()和take()的组合,但是count()给出了所有符合条件的元素,而不是符合条件的项目计数,直到条件为假。
任何帮助将是有用的,谢谢。
码:
public void blah()
{
List<testclass> someStrings = new List<testclass>()
{ new testclass() { name = "blah1", testNum = 1 },
new testclass() { name = "blah2", testNum = 2 },
new testclass() { name = "blah3", testNum = 3 },
new testclass() { name = "none4", testNum = 4 },
new testclass() { name = "blah5", testNum = 5 },
new testclass() { name = "blah6", testNum = 6 },
new testclass() { name = "none7", testNum = 7 }
};
foreach (testclass tc in someStrings)
{
string a = string.Join("", someStrings.TakeWhile(i => i.name.Contains("blah")
&& i.testNum >= tc.testNum).Select(g => g.name.ToString()));
}
}
我不确定您要从中实现什么,但是代码的问题是,当您第二次执行循环时,即对于testNum
为2
您的查询如下所示:-
string a = someStrings.Where(i => i.name.Contains("blah")
&& i.testNum >= 2).Select(g => g.name.ToString());
因此,显然第一个条件本身将失败,即,对于包含1
第一个元素, i.testNum >= 2
,您将不会获得任何结果或String.Empty作为输出。
据我了解,您可以按照@CodeDennis的建议添加之前的SkipWhile
来跳过以前的记录,从而实现所需的目标:-
string a = string.Join("", someStrings.SkipWhile(i => i.testNum < tc.testNum)
.TakeWhile(i => i.name.Contains("blah") && i.testNum >= tc.testNum)
.Select(g => g.name.ToString()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.