C# foreach中当前和以前的值比较

C# foreach中当前和以前的值比较,c#,if-statement,C#,If Statement,任何解决方案都是值得赞赏的,与此方法无关 foreach(var x in xs){ var y = getValuesfromX(x); foreach(var yvalue in y){ //Here I want if(yvalue is LESS than 100 and if (yvalue - previousyvalue) not GEATER than 30){ // perform action //el

任何解决方案都是值得赞赏的,与此方法无关

foreach(var x in xs){
    var y = getValuesfromX(x);

    foreach(var yvalue in y){

        //Here I want if(yvalue is LESS than 100 and if (yvalue - previousyvalue) not   GEATER than 30){

       // perform action

        //else, quit looping xs am not interested anymore after the difference reached 30

使用
Zip
运算符可以采取一些方法,但除此之外,将上一个值(或下一个值的限制)保留为变量可能是最简单的方法:

foreach (var x in xs)
{
    var ys = GetValuesForX(x);
    int limit = int.MaxValue; // Any value is fine to start with.
    foreach (var y in ys)
    {
        if (y > limit)
        {
            break;
        }
        if (y < 100)
        {
            // Take some action 
        }
        limit = y + 30;
    }
}
foreach(变量x在xs中)
{
var ys=GetValuesForX(x);
int limit=int.MaxValue;//任何值都可以开始。
foreach(y型变量,以ys为单位)
{
如果(y>限制)
{
打破
}
如果(y<100)
{
//采取行动
}
极限=y+30;
}
}

请注意,如果
y
可以是
int.MaxValue-30

请不要使用foreach for循环,这将导致问题。那么你可以引用任何项目。第一个Y值如何?只需与100进行比较,因为之前没有值?@PreetSangha:您假设
getValuesFromX
返回类似于
列表的值。它可能不是-它可能只是返回
IEnumerable
@JonSkeet-是的,但如果不是,那么这可能是转换数据的充分理由-如果可能的话。或者,如果需要,可以对数据进行多次传递。@PreetSangha:可能是,但可能不是。可能无法对数据进行多次传递。。。最重要的是,你的评论似乎没有考虑任何这些,它只是假设你可以使用<代码>使用<索引> <代码>循环。如果(yVal-PyviouyValuy)不大于30 部分,并且依赖于他的<代码>动作< /代码> for循环,那么,如果我的限制是140,那么循环可能更好,但是这里,如果我的极限是(明确地说,y可以是140-30在任何限制我采取)我希望current-previous的差值小于30,所以如果我假设previousyvalue的初始值=0,那么当我的第一个值为31@WiiMaxx:我没有遗漏这一点-这就是
limit
的要点。对于
for
循环,您似乎假设这是一个indexed集合。@TrackmeifYouCan:我没有假设任何初始值为
PreviousValue
-我从
MaxValue
的限制开始,这样你就永远不会在第一次迭代时中断。哦,我错过了
not
是因为
GEATER
我的错误,所以+1:)