如何从 try/catch 内部打破循环?
How do a break a loop outside a try/catch from within it?
我正在为学校开发一个简单的 class 项目来试验 c# 中的继承和其他要素,但我在某些部分遇到了问题。我相信我需要在无条件 while 循环中尝试捕获以确保用户以正确的形式输入数据,但我还需要能够从错误处理代码中跳出循环。我在给我带来问题的代码下方添加了注释。
class Program : students
{
static void Main(string[] args)
{
students stu = new students();
Console.Write("Number of students are you recording results for: ");
int studNum = int.Parse(Console.ReadLine());
stu.setNoOfStudents(studNum);
Console.WriteLine();
for (int a = 0; a < studNum; a++)
{
Console.Write("{0}. Forename: ", a + 1);
stu.setForname(Console.ReadLine());
Console.Write("{0}. Surname: ", a + 1);
stu.setSurname(Console.ReadLine());
while (0 == 0)
{
try
{
Console.Write("{0}. Age: ", a + 1);
stu.setstudentAge(int.Parse(Console.ReadLine()));
Console.Write("{0}. Percentage: ", a + 1);
stu.setpercentageMark(int.Parse(Console.ReadLine()));
stu.fillArray();
break;
// This is the block that gives me problems; the
// while loop doesn't break.
}
catch (Exception)
{
Console.WriteLine("This must be a number.");
}
}
}
}
}
我没有收到错误,因为它在 try/catch 内,但 while(0 == 0) 循环从未中断,因此 for 循环无法迭代命令。有人可以给我一个解决方案吗?
试试这个而不是休息
bool stop = false;
while (!stop)
{
try
{
// Time to exit the loop
stop = true;
}
catch { ... }
}
你可以试试这个方法
添加假异常
public class FakeException: Exception { }
示例代码:
try
{
//break;
throw new FakeException();
}
catch(Exception ex)
{
if(ex is FakeException) return;
//handle your exception here
}
问题误导。 break
确实是正确的方法(不需要标志和假异常)并且它 有效 (在你的情况下打破 while
循环)。代码中唯一保持循环的分支是 catch
块,但我猜这是故意的(否则 while
循环没有意义)。
break
应该会把你带出while loop
。如果您逐步通过,break
会发生什么?
我建议使用 Int.TryParse
:
bool input_ok = false;
int input;
while (! input_ok)
{
Console.Write("{0}. Age: ", a + 1);
input_ok = int.TryParse(Console.ReadLine(), out input);
if (input_ok)
{
stu.setstudentAge(input)
}
}
while
循环应该保持 运行 直到你得到合适的东西。
for loop
.
里面的所有内容
我正在为学校开发一个简单的 class 项目来试验 c# 中的继承和其他要素,但我在某些部分遇到了问题。我相信我需要在无条件 while 循环中尝试捕获以确保用户以正确的形式输入数据,但我还需要能够从错误处理代码中跳出循环。我在给我带来问题的代码下方添加了注释。
class Program : students
{
static void Main(string[] args)
{
students stu = new students();
Console.Write("Number of students are you recording results for: ");
int studNum = int.Parse(Console.ReadLine());
stu.setNoOfStudents(studNum);
Console.WriteLine();
for (int a = 0; a < studNum; a++)
{
Console.Write("{0}. Forename: ", a + 1);
stu.setForname(Console.ReadLine());
Console.Write("{0}. Surname: ", a + 1);
stu.setSurname(Console.ReadLine());
while (0 == 0)
{
try
{
Console.Write("{0}. Age: ", a + 1);
stu.setstudentAge(int.Parse(Console.ReadLine()));
Console.Write("{0}. Percentage: ", a + 1);
stu.setpercentageMark(int.Parse(Console.ReadLine()));
stu.fillArray();
break;
// This is the block that gives me problems; the
// while loop doesn't break.
}
catch (Exception)
{
Console.WriteLine("This must be a number.");
}
}
}
}
}
我没有收到错误,因为它在 try/catch 内,但 while(0 == 0) 循环从未中断,因此 for 循环无法迭代命令。有人可以给我一个解决方案吗?
试试这个而不是休息
bool stop = false;
while (!stop)
{
try
{
// Time to exit the loop
stop = true;
}
catch { ... }
}
你可以试试这个方法
添加假异常
public class FakeException: Exception { }
示例代码:
try
{
//break;
throw new FakeException();
}
catch(Exception ex)
{
if(ex is FakeException) return;
//handle your exception here
}
问题误导。 break
确实是正确的方法(不需要标志和假异常)并且它 有效 (在你的情况下打破 while
循环)。代码中唯一保持循环的分支是 catch
块,但我猜这是故意的(否则 while
循环没有意义)。
break
应该会把你带出while loop
。如果您逐步通过,break
会发生什么?
我建议使用 Int.TryParse
:
bool input_ok = false;
int input;
while (! input_ok)
{
Console.Write("{0}. Age: ", a + 1);
input_ok = int.TryParse(Console.ReadLine(), out input);
if (input_ok)
{
stu.setstudentAge(input)
}
}
while
循环应该保持 运行 直到你得到合适的东西。
for loop
.