我正在尝试检查此数组中的升序 但不确定如何使用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
答案 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];
...
...
...
}