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データが無効かどうかを確認するだけでなく、ユーザーが無効なデータを入力したときに自動的にスローされるように作成するにはどうすればよいですか。FormatExceptionint

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 に答える