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

时间:2014-12-12 13:23:42

标签: c# loops for-loop

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

但不起作用

8 个答案:

答案 0 :(得分:13)

您可以在循环中添加多个条件:

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的{​​{3}}(强调我的):

  

条件部分包含一个布尔表达式,它被评估以确定循环是应该退出还是应该再次运行

答案 1 :(得分:3)

你遇到的问题是你在10点击中时不会打破内循环。

你在for循环中使用的while循环将永远执行。

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

    }

答案 2 :(得分:3)

如果你想循环最多10次,或行数:

for (int i=0; i < Math.Min(oDTEvent.Rows.Count, 10); i++) { ... }

这只取两个数字中较小的一个。

答案 3 :(得分:2)

试,

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";
}

答案 4 :(得分:2)

最简单的是:

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";
}

答案 5 :(得分:2)

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";
}

答案 6 :(得分:1)

在你的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;

答案 7 :(得分:0)

试试这个:

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


    }