我正在编写一个类似于C#的函数:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
goto out1;
}
Console.WriteLine("hello " + 1);
out1:
string hello = "";
}
}
这基本上计算数字,如果i大于20,则不应写入console.writeline。它应该跳过并点击“out1”但是“out1”最终需要有一个函数来编译。它需要有“string hello =”“”来编译。我不需要“string hello =”“”。我只是希望它什么也不做,并且循环结束了。如果没有out1:语句需要的“string hello =”“”,有没有办法做到这一点?像:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
goto out1;
}
Console.WriteLine("hello " + 1);
out1:
}
}
感谢。
答案 0 :(得分:27)
尽管说使用goto有更好的方法来解决这个问题是绝对正确的,但我注意到没有人真正回答过你的问题。
标签必须标记声明。您想要转到没有与之关联的语句的位置。您可以使用单个分号或空块创建空语句。
out1:
;
}
或
out1:
{}
}
但是就像他们说的那样,如果你能避免它,就不要去那里。
答案 1 :(得分:17)
这个循环可以很容易地用很多其他方式编写 - 你可以在i<=20
而不是i<40
(最好)时循环,或者将Console.WriteLine
调用移动到带有if的if语句中倒。
但是,我假设您正试图在“真实”案例中使用更详细的场景。如果是这种情况,请使用goto
跳过剩余的循环,而不是使用continue
:
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue; // Skips the rest of this loop iteration
}
Console.WriteLine("hello " + 1);
}
}
同样,你可以使用break
完全摆脱循环而不处理更多元素,如果这更适合你的实际情况。
答案 2 :(得分:10)
只是颠倒你的状况 - if...else
可能是另一种选择。我假设还有其他代码,否则您可以将for
循环本身更改为最多20个。
for(int i = 0; i < 40; i++)
{
if(i <= 20)
{
Console.WriteLine("hello " + 1);
}
//other code
}
答案 3 :(得分:5)
还有一些其他类似goto的语句,你应该考虑使用:
continue
进入当前循环的下一次迭代。break
离开当前循环return
退出当前方法如果以上都不符合您的要求,您应该只考虑goto
。根据我的经验,这种情况很少发生。
看起来你想在这里使用continue
。
答案 4 :(得分:4)
您可以使用continue
关键字:
public void CountNumber() {
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue;
}
Console.WriteLine("hello " + 1);
}
}
但是,请考虑改为使用if
:
public void CountNumber() {
for(int i = 0; i < 40; i++) {
if(i <= 20) {
Console.WriteLine("hello " + 1);
}
}
}
答案 5 :(得分:1)
public void CountNumber()
{
for(int i = 0; i < 40; i++) {
if(i > 20) {
continue;
}
Console.WriteLine("hello " + 1);
}
}