foreach,额外的条件声明

时间:2011-01-11 17:34:58

标签: c#

抱歉,希望没有人会因为一个菜鸟问题而拒绝我,我还没有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语句?谢谢!

7 个答案:

答案 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);
}