Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 破坏foreach vs条件签入的_C#_Loops_Coding Style - Fatal编程技术网

C# 破坏foreach vs条件签入的

C# 破坏foreach vs条件签入的,c#,loops,coding-style,C#,Loops,Coding Style,就更好的编码实践而言,哪一个是更好的决策 在foreach中使用中断跳出循环 在for循环中使用条件检查结束循环 例如,使用foreach: foreach(string bean in stringArray) { if(bean == "green") { break; } } 还有一个带有for循环的示例: bool found = false; for (int i = 0; i < stringArray.Length &&

就更好的编码实践而言,哪一个是更好的决策

  • 在foreach中使用
    中断
    跳出循环
  • 在for循环中使用条件检查结束循环
  • 例如,使用foreach:

    foreach(string bean in stringArray)
    {
        if(bean == "green")
        {
            break;
        }
    }
    
    还有一个带有for循环的示例:

    bool found = false;
    for (int i = 0; i < stringArray.Length && !found; i++)
    {
        if (stringArray[i] == "green")
        {
            found = true;
        }
    }
    
    boolfound=false;
    对于(int i=0;i
    只需将该机制完全抽象为另一种方法即可

    (在本例中,.NET已经有了这样一个方法,所以您不需要编写一个。)

    如果要确定是否有任何项目符合此条件:

    var found = stringArray.Any(bean => bean == "green");
    
    如果要在满足条件之前获取所有项目:

    var query = stringArray.TakeWhile(bean => bean != "green");
    
    或者,如果您只想对上述各项采取行动:

    foreach(var bean in stringArray.TakeWhile(bean => bean != "green"))
    {
    
    }
    

    把这个机制完全抽象成另一种方法

    (在本例中,.NET已经有了这样一个方法,所以您不需要编写一个。)

    如果要确定是否有任何项目符合此条件:

    var found = stringArray.Any(bean => bean == "green");
    
    如果要在满足条件之前获取所有项目:

    var query = stringArray.TakeWhile(bean => bean != "green");
    
    或者,如果您只想对上述各项采取行动:

    foreach(var bean in stringArray.TakeWhile(bean => bean != "green"))
    {
    
    }
    

    break示例更易于阅读和理解,因此这里的选项更好。正如Servy的回答所示,使用LinQ,通常有一种更简单的方法来循环一组值:让框架为您执行。LinQ的问题:需要.NET 3.5+。如果您被困在预LINQ.NET(2.0、3.0)中,那么LINQ是不可接受的。从语义的角度来看:
    break
    选项更具可读性,也更容易理解。快速浏览一下,当
    bean
    green
    时,循环终止。这仍然可以通过
    for
    循环来完成,如果您不需要绝对的实例化变量,那么这往往是更好的做法。(即
    bean
    变量)break示例更易于阅读和理解,因此这里的选项更好。正如Servy的回答所示,使用LinQ,通常有一种更简单的方法来循环一组值:让框架为您执行。LinQ的问题:需要.NET 3.5+。如果您被困在预LINQ.NET(2.0、3.0)中,那么LINQ是不可接受的。从语义的角度来看:
    break
    选项更具可读性,也更容易理解。快速浏览一下,当
    bean
    green
    时,循环终止。这仍然可以通过
    for
    循环来完成,如果您不需要绝对的实例化变量,那么这往往是更好的做法。(即
    bean
    变量)我假设TakeWhile用于有序类型的集合,如数组或LinkedList?此方法唯一的问题是依赖于LINQ和.NET 3.5+。@Justin它是
    IEnumerable
    的扩展方法,它可以通过有序或无序的集合来实现。我必须说实话。。。我从事LINQ编程多年,我见过
    TakeWhile
    只使用了很少几次。。。这是您看到和想到的“aaaand”?@EBrown我特别指出,从设计的角度来看,这里的想法是将操作机制(如“在满足此条件之前,将所有项都给我”)与作用于这些项的业务逻辑分开。如果需要的话,编写这些机制的您自己的实现是很容易的,特别是如果您没有使操作像LINQ实现那样健壮和通用(尽管目前.NET 2.0上的人数非常少)。我假设TakeWhile用于有序类型的集合,如数组或LinkedList?此方法唯一的问题是依赖于LINQ和.NET 3.5+。@Justin它是
    IEnumerable
    的扩展方法,可由有序或无序集合实现。我必须说实话。。。我从事LINQ编程多年,我见过
    TakeWhile
    只使用了很少几次。。。这是您看到和想到的“aaaand”?@EBrown我特别指出,从设计的角度来看,这里的想法是将操作机制(如“在满足此条件之前,将所有项都给我”)与作用于这些项的业务逻辑分开。如果需要的话,编写这些机制的您自己的实现是很容易的,特别是如果您没有使操作像LINQ实现那样健壮和通用(尽管目前.NET 2.0上的人数非常少)。