0

这段代码只是简单的抛出异常,因为short sNum 被赋值为int num 的大范围值,转换失败。反正。我想循环请求,直到输入有效的短路范围。

    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();
    }

谢谢你。

4

2 回答 2

6

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();
}
于 2012-10-27T09:10:05.703 回答
0
short sNum;
string input;

do
{
    input = Console.ReadLine();
} while (!Int16.TryParse(input, out sNum))

Console.WriteLine("output is {0}", sNum);
于 2012-10-27T09:12:26.920 回答