2

我有以下代码:

       List<int> moneys = new List<int>();
       Console.WriteLine("Please enter the cost of your choice");
       int money = int.Parse(Console.ReadLine());
       moneys.Add(money);

如果您输入文本,则程序将停止工作并出现未处理的异常消息。我想知道您将如何处理异常,如果它甚至可能使程序不会停止工作?

4

5 回答 5

5

您应该使用TryParse方法。如果输入无效,它不会抛出异常。做这个

int money;
if(int.TryParse(Console.ReadLine(), out money))
   moneys.Add(money);
于 2013-08-07T13:59:48.483 回答
2
int money ;
bool pass = int.TryParse(Console.ReadLine(), out money);
if(pass)
       moneys.Add(money);
于 2013-08-07T13:58:46.213 回答
0

int.Parse当它无法解析字符串时抛出异常。您有 2 个选择:

1) 使用 Try/Catch 处理异常

try {
    int money = int.Parse(Console.ReadLine());
    moneys.Add(money);
} catch {
    //Did not parse, do something
}

此选项允许更灵活地处理不同类型的错误。您可以扩展 catch 块来拆分输入字符串中的 3 个可能的错误,并扩展另一个默认的 catch 块来处理其他错误:

} catch (ArgumentNullException e) {
    //The Console.ReadLine() returned Null
} catch (FormatException e) {
    //The input did not match a valid number format
} catch (OverflowException e) {
    //The input exceded the maximum value of a Int
} catch (Exception e) {
    //Other unexpected exception (Mostlikely unrelated to the parsing itself)
}

2)使用int.TryParsewhich 返回truefalse取决于字符串是否被解析,并将结果发送到第二个参数中指定的变量(使用out关键字)

int money;
if(int.TryParse(Console.ReadLine(), out money))
    moneys.Add(money);
else
    //Did not parse, do something
于 2013-08-07T14:02:07.793 回答
0

实现一个try-catch块或使用Int32.TryParse.

于 2013-08-07T13:59:17.797 回答
0

要在抛出异常后对其进行处理,请使用 try/catch 块。

try
{
//input
}
catch(Exception ex)
{
//try again
}

您也可以使用 TryParse 预先处理它,并检查 int 是否为空。

于 2013-08-07T13:59:34.013 回答