我在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";
}
}
但不起作用
答案 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";
}