我尝试对下面的代码使用自定义异常.
当用户输入字符串而不是整数时,它应该显示来自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("nn"+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
您可以检查用户是否只输入数字
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);
}