在 C# 中设置 for 循环的迭代次数限制
本文关键字:迭代 循环 设置 for | 更新日期: 2023-09-27 18:34:02
我在 C# 中有以下for
循环;
for (int i = 0; i < oDTEvent.Rows.Count; i++ )
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
我想将迭代次数限制为最多 10 次。
我不能执行以下操作:
for(int i=0; i<10;i++)
因为表中并不总是有 10 行。
我试过:
int i=0;
while (i < 10)
{
for (i = 0; i < oDTEvent.Rows.Count; i++ )
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
}
但这不起作用,因为内部i
不会增加外部i
我也试过
int i=0;
for (i = 0; i < oDTEvent.Rows.Count; i++ )
{
while (i < 10)
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
}
但也不起作用
您可以在循环中添加多个条件:
for (int i = 0; i < oDTEvent.Rows.Count && i < 10; i++ )
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
来自for
的文档(强调我的):
条件部分包含一个布尔表达式,计算该表达式以确定循环是应退出还是应再次运行
您遇到的问题是,当内部循环达到 10 时,您没有中断内部循环。
你拥有的 while 循环及其内部的 for 循环将永远执行。
for (int i = 0; i < oDTEvent.Rows.Count; i++ )
{
//If the counter has incremented past 9 then break the loop
if(i > 9)
break;
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " +
DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
如果要循环最多 10 次或行数:
for (int i=0; i < Math.Min(oDTEvent.Rows.Count, 10); i++) { ... }
这只是取两个数字中较小的一个。
尝试,
int max = oDTEvent.Rows.Count > 10 ? 10 : oDTEvent.Rows.Count;
for (int i = 0; i < max; i++ )
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
最简单的是:
for (int i = 0; i < oDTEvent.Rows.Count; i++ )
{
if(i >= 10) {
break;
}
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
for (int i = 0; i < Math.Min(10, oDTEvent.Rows.Count); i++ )
{
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}
在 for 循环之前执行以下操作:
int loopLimiter = 0;
if (oDTEvent.Rows.Count >= 10)
{
loopLimiter = 10;
}
else
{
loopLimiter = oDTEvent.Rows.Count;
}
或者为了使其更干净:
oDTEvent.Rows.Count >= 10 ? loopLimiter = 10 : loopLimiter = oDTEvent.Rows.Count;
试试这个:
int i=0;
int maxInt = 10;
for (i = 0; i < oDTEvent.Rows.Count; i++ )
{
if (i >= maxInt)
break;
EventAlerts += DataUtils.GetStringField(oDTEvent.Rows[i], "DateTime") + " " + DataUtils.GetStringField(oDTEvent.Rows[i], "Description") + " 'n";
}