即使我处理了FormatException,但当我给出字母而不是数字时,此代码也会输出未处理的FormatException?

时间:2018-08-18 19:42:29

标签: c# exception-handling

using System;
using System.Text;
namespace pgm 
{
    class CalculatorExceptions
    {
        static void Main(string[] args)
        {
            int num1,num2;
            string operand;
            Console.WriteLine("+ Add\n- Subtract\n* Multiply\n/ Division\nSelect your operation");
            operand = Console.ReadLine();
            Console.WriteLine("Enter any two values");
            num1=Convert.ToInt32(Console.ReadLine());
            num2=Convert.ToInt32(Console.ReadLine());
            var opr = new operations();
            try
            {
            switch(operand)
            {
                case "+":
                    opr.Addition(num1,num2);
                    break;
                case "-":
                    opr.Subtraction(num1,num2);
                    break;
                case "*":
                    opr.Multiplication(num1,num2);
                    break;
                case "/":
                    opr.Division(num1,num2);
                    break;
            }
            }
            catch(FormatException)
            {
                Console.WriteLine("Input string was not in a correct format\nResult: 0");
            }
           }
    }
    class operations{
        public void Addition(int num1,int num2)
        {
            int res;
            res = num1 + num2;
            Console.WriteLine("Result: {0}",res);
        }
        public void Subtraction(int num1,int num2)
        {
            int res;
            res = num1 - num2;
            Console.WriteLine("Result: {0}",res);
        }
        public void Multiplication(int num1,int num2)
        {
            int res;
            res = num1 * num2;
            Console.WriteLine("Result: {0}",res);
        }
        public void Division(int num1,int num2)
        {
            int res;
            res = num1 / num2;
            Console.WriteLine("Result: {0}",res);
        }
    }
}

1 个答案:

答案 0 :(得分:2)

该异常的来源正在解析:如果任何Console.ReadLine()的格式不正确 (例如"bla-bla-bla"),将抛出FormatException

// Potential source of FormatException 
num1 = Convert.ToInt32(Console.ReadLine());
// Potential source of FormatException 
num2 = Convert.ToInt32(Console.ReadLine());

简单补丁:将Convert(出于可读性考虑,我将其更改为Parse):

try

更好的解决方案 try { // Potential source of FormatException num1 = int.Parse(Console.ReadLine()); // Potential source of FormatException num2 = int.Parse(Console.ReadLine()); var opr = new operations(); ... } catch(FormatException) { Console.WriteLine("Input string was not in a correct format\nResult: 0"); } (根本没有int.TryParse):

try .. catch