自动生成自定义异常

时间:2013-08-31 23:58:38

标签: c# exception console-application custom-exceptions

我创建了一个custom-exception,我想在用户输入男性女性时抛出。我是用

做的
class sexException : Exception
{
    public override string Message
    {
        get
        {
            return "Sex can only be either MALE or FEMALE";
        }
    }
}

现在,当我想在我的主应用程序中抛出exception时,我将不得不创建异常对象,然后在抛出异常之前检查该值。

这样的东西
    public static void AcceptInfo()
    {
        Console.Write("Enter Sex : ");
        string sex = Console.ReadLine();
        if (sex.ToUpper() != "MALE" && sex.ToUpper() != "FEMALE")
        {
            try
            {
                sexException ne = new sexException();
                throw ne;
            }
            catch (sexException e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }

我的问题是;如何以这样的方式创建exception,以便在用户输入无效数据时自动抛出,而不必仅检查数据是否无效,如FormatException数据类型上的int

1 个答案:

答案 0 :(得分:1)

例外通常用于特殊情况。根据您的用户界面,实际上可能无法选择malefemale以外的其他内容,这意味着它将是检查的好时机。

在您的控制台应用程序示例中,异常感觉很人为。当你立即处理它时,不需要抛出异常。异常的想法是它应该被抛出以便调用者处理而不是作为程序流的一部分使用。你可以这样做

if(!sex.Equals("male", StringComparison.OrdinalIgnoreCase)
   && !sex.Equals("female", StringComparison.OrdinalIgnoreCase))
{
    Console.WriteLine("Sex can only be either MALE or FEMALE");
}

抛出FormatException和其他异常的方式与您所做的类似,但它们并不像您那样立即处理它。所以,从理论上讲,他们会做这样的事情

if (sex.ToUpper() != "MALE" && sex.ToUpper() != "FEMALE")
{
   throw new sexException();
}

例如,无论代码的哪一部分调用此方法,都应该在try...catch块中处理该异常。