升序的foreach

时间:2012-03-13 16:52:01

标签: c#

我正在尝试检查此数组中的升序 但不确定如何使用foreach

 foreach (double d in dSize)
        {

            if (dSize.ToString() != null)
            {
                double dSize1;
                string str1 = dSize.ToString();

                bool success1 = double.TryParse(str1, out dSize1);
                if ( dSize < 0.0)
                {
                    errMsg1 = " data grid should contain number >= 0";
                }
                //else
                //{
                //    errMsg1 = " data grid must be entered";
                //}
            }


                *if (inputs.dSize[rowCount] <= inputs.dSize[rowCount - 1])
                {
                    errMsg = "value in row " + (rowCount + 1) + " should be greater than the value in row " + rowCount;
                }
            }*
            swRpt.WriteLine(errMsg);
        }

我使用for循环完成了第二部分。想把它变成一个foreach

2 个答案:

答案 0 :(得分:2)

您只需要记住从一次迭代到下一次迭代的先前值。使用foreach的问题(与原始迭代器相反)是第一个值需要一个特殊情况:

Double lastDouble = null;
foreach(double d in dSize) {
    if ((lastDouble != null) && (lastDouble > d)) {
        errMsg = "value out of sequence";
        break;
    }
    lastDouble = d;
}

但是你丢失了错误的行号。您还可以从第一个条目中填入最后一个值,并使用LINQ

跳过一个值
double lastDouble = dSize.First();
foreach(double d in dSize.Skip(1)) {
    if (lastDouble > d) {
        errMsg = "value out of sequence";
        break;
    }
    lastDouble = d;
}

答案 1 :(得分:1)

为什么不......

  for(int i = dSize.Length-1; i>=0;i--)
  {
      double d = dSize[i];
      ...
      ...
      ...
  }