如何在C#中组织TRY CATCH,使控制台显示具体错误类型?
解决输入非整数时反馈具体错误类型的问题
你的原代码因为捕获了所有Exception类型,没法区分具体错误原因,所以没法给出针对性的错误提示。下面提供两种改进方案:
方案一:捕获具体异常类型(改进try-catch写法)
替换goto为更易读的do-while循环,同时捕获特定异常类型,分别给出提示:
int yas; bool isInputValid; do { Console.Write("请输入你的年龄:"); isInputValid = true; try { yas = int.Parse(Console.ReadLine()); Console.WriteLine("谢谢,我会记住的!"); } catch (FormatException) { Console.WriteLine("错误:你输入的不是有效的整数(比如字母、符号这类非数字内容),请重新输入!"); isInputValid = false; } catch (OverflowException) { Console.WriteLine("错误:你输入的数字超出了整数范围(-2147483648 到 2147483647),请重新输入!"); isInputValid = false; } } while (!isInputValid);
方案二:使用int.TryParse(更高效,避免异常开销)
异常处理存在一定性能开销,用TryParse先判断输入有效性,再进一步区分错误类型:
int yas; bool isInputValid; do { Console.Write("请输入你的年龄:"); string input = Console.ReadLine(); isInputValid = int.TryParse(input, out yas); if (!isInputValid) { if (string.IsNullOrWhiteSpace(input)) { Console.WriteLine("错误:你没有输入任何内容,请重新输入!"); } else { try { long temp = long.Parse(input); if (temp < int.MinValue || temp > int.MaxValue) { Console.WriteLine("错误:你输入的数字超出了整数范围(-2147483648 到 2147483647),请重新输入!"); } else { Console.WriteLine("错误:你输入的不是有效的整数,请重新输入!"); } } catch (FormatException) { Console.WriteLine("错误:你输入的不是有效的整数,请重新输入!"); } } } else { Console.WriteLine("谢谢,我会记住的!"); } } while (!isInputValid);
内容的提问来源于stack exchange,提问作者firat
相关产品推荐
相关产品推荐

