如果我写一个for、do或while循环,能不能用return关键字解决这个问题呢?
例如:
class BreakTest
{
public static void Main()
{
for (int i = 1; i <= 100; i++)
{
if (i == 5)
**return;**
Console.WriteLine(i);
}
}
}
我知道return可以用来退出if语句,所以我对此很好奇,因为我从来没有尝试过(也不能访问我的软件来编写代码来测试它)。
发布于 2009-12-02 07:08:43
return
将退出当前方法(在您的示例中为Main)。使用break
退出循环。
发布于 2009-12-02 07:35:07
你当然可以做你所要求的事情。关于你是否应该这样做,似乎有两个阵营。有些人说一个函数应该只有一个出口点。他们建议您应该使用一个标志变量来记录您需要退出(以及可能需要返回的任何数据),然后在您跳出循环或到达if/else树的末尾时返回。
就我个人而言,我对一个函数的多个出口点没有问题,只要它们是对称的。我说的“对称”是什么意思?好吧,如果我要从循环内部返回,那么我也想在循环结束时返回(以防我永远不会达到循环中导致我提前返回的条件)。如果我在一个复杂的if/else继承制中,并且我从其中一个案例中返回,那么我应该从所有案例中返回。
下面是一些我喜欢如何编写代码的快速示例:
public string Search(IEnumerable<string> values)
{
foreach(string value in values)
{
if(SomeArbitraryCondition())
return value;
}
return null;
}
public int PerformAction()
{
if (SomeArbitraryCondition())
{
if (SomeArbitraryCondition())
{
return 1;
}
else
{
return 2;
}
}
else
{
if (SomeArbitraryCondition())
{
return 3;
}
else
{
return 4;
}
}
}
这真的不是一个我想得太多的硬性规则,但这只是我更喜欢写它的方式,因为它对我来说似乎是最干净的。在某些情况下,使用标志变量并只在一个地方返回会更有意义。
public string Search(IEnumerable<string> values)
{
string found = null;
foreach(string value in values)
{
if(SomeArbitraryCondition())
found = value;
}
return found;
}
public int PerformAction()
{
int state;
if (SomeArbitraryCondition())
{
if (SomeArbitraryCondition())
{
state = 1;
}
else
{
state = 2;
}
}
else
{
if (SomeArbitraryCondition())
{
state = 3;
}
else
{
state = 4;
}
}
return state;
}
发布于 2016-11-27 17:48:42
答得太迟了,但是如果return;
的返回类型是空的,它将退出你的整个方法(所以也会退出你的循环)。如果不是,它就不会编译,除非你返回方法的类型。
https://stackoverflow.com/questions/1829593
复制相似问题