首页 > 解决方案 > 自定义格式异常 c# - 异常未处理,为什么?

问题描述

我尝试对以下代码使用自定义异常。
当用户输入一个字符串而不是 int 数字时,它应该显示来自AgeException. 但它显示了一个未处理的异常。

class Program
    {
        static void Main(string[] args)
        {
            try {
                Console.WriteLine("Enter Your Age: ");
                int age = Convert.ToInt32(Console.ReadLine());

                if(age>40 || age<6){
                     throw new AgeException(age);
                   }
                else{
                     Console.WriteLine("Your age is :"+age);
                   }
                
            }

            // when (ex.Message.Length>50)
            catch(AgeException ex) //when (ex.Message.Length>15)
            {
                //throw ex;
                Console.WriteLine("Errorrrrr from Age exception class: "+ex.Message);
                Console.ReadLine();
            }
            //catch(Exception ex)
            //{
            //     Console.WriteLine(ex.Message);
            //    Console.WriteLine("\n\n"+ex.StackTrace);
                
            //}


            Console.ReadLine();
        }
    }

    class AgeException : FormatException
    {
        private int messageDetails;
        // private string messageage;

        public AgeException() {        }
        public AgeException(int age) : base(String.Format("Invalid Student AGe: {0}", age))
        {
            messageDetails = age;
        }
        
       public override string Message => $"Invalid age: {messageDetails}";
        //public override string Message => $"Invalid age: {messageage}";

    }```


  [1]: https://i.stack.imgur.com/YmWay.png

标签: c#exception

解决方案


您可以检查用户是否只输入数字

    Console.WriteLine("Enter Your Age: ");
    int age;
    
    while(!int.TryParse(Console.ReadLine(), out age))
    {
         Console.Clear();
         Console.WriteLine("You entered an invalid number");
         Console.Write("Enter Your Age: ");
    }

    if(age>40 || age<6){
           throw new AgeException(age)
    }
    else{
        Console.WriteLine("Your age is :"+age);
    }

推荐阅读