在 C# 中设置 for 循环的迭代次数限制



我在 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";

    }

最新更新