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(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上的人数非常少)。