如何使用foreach
循环
for(int i = 0; i<=dt.Rows.Count -1; i++)
{
var quote = Convert.ToDouble(dt.Rows[i]["Data"]) - Convert.ToDouble(dt.Rows[i-1]["Data"])
}
当我使用foreach
循环时:
foreach (DataRow row in dt.Rows)
{
// how can i write this statement like the loop above.
}
答案 0 :(得分:0)
您可以在循环的每次迭代中存储先前的值,以便在下一次迭代中使用。
var prev = 0;
foreach (DataRow row in dt.Rows)
{
var quote = Convert.ToDouble(row["Data"]) - Convert.ToDouble(prev);
prev = row["Data"];
}
如何设置初始值为0的报价:
double quote = 0.0;
var prev = 0;
foreach (DataRow row in dt.Rows)
{
quote = Convert.ToDouble(row["Data"]) - Convert.ToDouble(prev);
prev = row["Data"];
}
在循环的第一次迭代中将引号设置为0的另一种方法:
var prev = 0;
var i = 0;
foreach (DataRow row in dt.Rows)
{
double quote;
if(i == 0)
{
quote = 0.0;
}
else
{
quote = Convert.ToDouble(row["Data"]) - Convert.ToDouble(prev);
}
prev = row["Data"];
i++;
}
注意:最后一个例子,基于OP对我的回答的评论,实际上只是在黑暗中被刺,因为OP没有给出明确的定义。这些附加示例实际上超出了原始问题的范围。
答案 1 :(得分:0)
如果您使用foreach
循环,则不会有索引但只有当前项目。因此,如果您想访问之前的DataRow
,则应使用for
- 循环,就像您的第一种方法一样。但是你可以把它写得更具可读性和效率:
for(int i = 1; i < dt.Rows.Count -1; i+=2)
{
double thisData = dt.Rows[i].Field<double>("Data");
double prevData = dt.Rows[i-1].Field<double>("Data");
double quote = thisData - prevData;
}