抱歉,希望没有人会因为一个菜鸟问题而拒绝我,我还没有C#参考书><
有没有办法在foreach循环中放入一个额外的条件语句,例如:
string[] giggles = new string[6] { "one", "two", "three", "four", "five", "Six" };
int i = 0;
foreach (string gig in giggles && i < 4)
{
lblDo.Text = gig;
i++;
}
这显然不起作用,但是我可以使用类似的东西,还是我在循环中使用if / break语句?谢谢!
答案 0 :(得分:17)
您可以使用:
foreach (string gig in giggles.Take(4))
{
//..
}
这样做是为了创建一个新的枚举器,该枚举器仅限于giggles
的前四个项目。 Take()
是LINQ扩展方法之一,因此它与条件有点不同,但结果是一样的。
基本上你只能通过操纵集合来实现很多东西。以下是您特别要求的代码:
int i = 0;
foreach (string gig in giggles.Where( x => i <= 4))
{
lblDo.Text = gig;
i++;
}
答案 1 :(得分:4)
您必须使用if / break或for循环。 foreach循环几乎是有意限制的,因为这一点只是迭代一个可枚举的集合*。如果你想要更简洁的循环控制,你将使用for循环,while循环或do-while循环。
*实际上,任何具有GetEnumerator()方法的东西。
答案 2 :(得分:1)
在这种情况下,你应该将它重构为for循环而不是foreach循环。
foreach
不能基于条件,而是每个IEnumerable项的操作一次。另一方面,for
专门用于处理条件语句。
我写这个:
string[] giggles = new string[6] { "one", "two", "three", "four", "five", "Six" };
for (int i = 0; i < 4; ++i)
{
lblDo.Text = giggles[i];
}
如果你从其他地方吸引“giggles”,并且可能少于4个元素,你可能想要:
for (int i = 0; i < giggles.Length && i < 4; ++i)
{
lblDo.Text = giggles[i];
}
答案 3 :(得分:1)
改为使用for循环?
for(int i = 0; i < 4 || i < giggles.Count; i++)
{
giggles[i].doSomething();
}
答案 4 :(得分:1)
尝试在循环中使用if
块。和break
关键字,如果需要退出循环:
foreach (string gig in giggles)
{
if(i >= 4)
{
break;
}
lblDo.Text = gig;
i++;
}
答案 5 :(得分:1)
这实际上取决于你想要做什么。你可以在这个例子中使用Take()。
string[] giggles = new string[6] { "one", "two", "three", "four", "five", "Six" };
foreach (string gig in giggles.Take(4))
{
lblDo.Text = gig;
}
但是如果你想要以“f”开头的字符串,你可能想要使用where
foreach (string gig in giggles.Where(s => s.StartsWith("f") ))
{
Console.WriteLine(gig);
}
答案 6 :(得分:1)
如果事实,foreach循环可以使用额外的条件。 Where函数可以包含不影响列表本身的条件:
根据您的需要,您可以使用类似的东西:
int i = 0;
foreach (var gig in giggles.Where( p => i < 4 ))
{
...
i++;
}
最近,我以这种方式使用它来打破外部条件的循环:
bool saveOk = true;
foreach ( var item in myList.Where( p=> saveOk ))
{
saveOk = saveTheItem(item);
}