此代码只是抛出异常,因为短sNum被赋予int num的大范围值,并且转换失败。无论如何。 我想循环请求,直到输入有效的rang为止。
static void Main()
{
int num = 40000;
short sNum = 0;
try
{
sNum = Convert.ToInt16(num);
}
catch (OverflowException ex)
{
// Request for input until no exception thrown.
Console.WriteLine(ex.Message);
sNum = Convert.ToInt16(Console.ReadLine());
}
Console.WriteLine("output is {0}",sNum);
Console.ReadLine();
}
谢谢。
答案 0 :(得分:5)
原因是您在catch
块内转换失败时抛出异常。 catch
块在技术上位于try
块之外,因此它不会被您认为的catch
所捕获。这并不像你希望的那样表现为循环。
异常通常不被视为代码中正常(非异常)事件的最佳方法。在这种情况下,TryParse
方法和循环会好得多。
static void Main()
{
string input = //get your user input;
short sNum = 0;
while(!short.TryParse(input,out sNum))
{
Console.WriteLine("Input invalid, please try again");
input = //get your user input;
}
Console.WriteLine("output is {0}",sNum);
Console.ReadLine();
}
答案 1 :(得分:0)
short sNum;
string input;
do
{
input = Console.ReadLine();
} while (!Int16.TryParse(input, out sNum))
Console.WriteLine("output is {0}", sNum);