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

C# 比较当前值和以前的值,c#,C#,我有一个循环,在这个循环中我得到我的值 var val= (from entry in Data select (entry.Value)).ToList().First(); 数据是我暂时使用的字典,val是double类型。 所以我有 foreach(var v in val) if(v > 100){ // here I wanna check if the difference between current and last value is greaterthan 1

我有一个循环,在这个循环中我得到我的值

var val= (from entry in Data select (entry.Value)).ToList().First();
数据是我暂时使用的
字典
val
是double类型。 所以我有

foreach(var v in val)
  if(v > 100){
  // here I wanna check if the difference between current and last value is greaterthan 10, to skip the setValue and exit the foreach loop. 

     a.setValue(v);

     }
现在,如果当前值和上一个值之间的差值大于10,我不想设置该值

我应该创建一个列表还是什么的?

与您正在寻找的类似吗

var numbers = new []{ 1, 2, 3, 40, 41 };

var differences = numbers.Skip(1).Zip(numbers, (prev, curr) => Math.Abs(prev - curr));

var result = numbers.TakeWhile((obj, index) => index == 0 || numbers[index - 1] <= 10);

// outputs:
// 1
// 2
// 3
// 40
var number=new[]{1,2,3,40,41};
var差异=数字.Skip(1).Zip(数字,(prev,curr)=>Math.Abs(prev-curr));

var result=numbers.TakeWhile((obj,index)=>index==0 | | numbers[index-1]您正在寻找类似的值吗?这将在另一个变量中存储以前的值,然后与v的当前值进行比较

decimal previousVal = 0;

foreach(var v in val)
{
    if(previousVal > 0)
    {
        if(Math.Abs(v - previousVal) > 10) 
        {
           // diff greater than 10
        }
    }
    a.setValue(v);
    previousVal = v;
}
编辑:

0
只是指示这是否是循环的第一次迭代。如果
0
是一个潜在值,则可以使用可为空的十进制:

decimal ? previousVal = null;

foreach(var v in val)
{
    if(previousVal != null)
    {
        if(Math.Abs(v - previousVal) > 10) 
        {
           // diff greater than 10
        }
    }
    a.setValue(v);
    previousVal = v;
}

如果我能正确地理解你的情况,请考虑一下:
//List<double> 
var list = (from entry in Data select (entry.Value)).ToList();

double previousValue = 0;
for (int i=0; i< list.Count; i++)
{
    var diff = list[i] - previousValue;
    if (diff <= 10)
        a.setValue(list[i]);

    previousValue = list[i];
}
//列表
var list=(从数据选择中的条目(entry.Value)).ToList();
双前值=0;
for(int i=0;i如果(diff第一次迭代,val=10,2次11,12,当其为21时,我想知道:P@justanidiot很抱歉,您的问题非常不清楚。请您将其展开以更具体地说明您想要什么?我在运行时读取Val,并为每次读取的值添加它。我想停止添加,如果最后一个Val值相差超过10,我想停止添加是,但是c仅比较最后两个值,如果您看到上面更清晰的内容,现在我编辑了解决方案,因此前面的值方法看起来更吸引人,只是我不能使用上面的答案,我需要一分钟后的评论中的相反内容。您说:“
val
double
”,您说“foreach(var v in val)”?如何在double上迭代???什么是'a'变量?抱歉,这是一个选项,不想麻烦,它只是一个可为null的自定义类型,所以我需要foreach,但无论如何,我会在每个变量之前循环value@justanidiot,请改进您的问题。请给出一个代码的工作示例,而不仅仅是随机出现错误的行。我想我知道您的想法你想要,但我不知道哪个字是什么。你不能用double类型循环。但是他们,我感兴趣,否则,就像我想在条件小于10时做些什么,所以现在在这种情况下,第一次迭代只有在我大于0时才有效,我想加上第一次迭代,第二次,第三次直到数学。Abs(v-previousVal)>10但在这种情况下,如果为null,我不会输入if子句,我需要这样做,因为像这样我会错过第一个值,第一个iteration@justanidiot第一次迭代的值将存储在v中,并且没有以前的值可与之比较,因此我们已经知道差值不大于10。它将与第二次迭代进行比较第二次迭代时的值。但当它更大时,我想停止读取v并退出foreach,因为我不再对值感兴趣,但我只对两个值感兴趣,列表太多了,对吗?