0

我创建了一个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

4

1 回答 1

1

异常通常用于特殊情况。根据您的用户界面,实际上可能无法选择其他内容,male或者female这意味着现在是检查的好时机。

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

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块中处理该异常。

于 2013-09-01T00:07:30.873 回答