0

私は C# の初心者で、PHP から来たばかりです。

具体的には、私が理解しにくいコードを「コピー/貼り付け」させてください。

「現在の年」から「生年月日」を減算し、更新された年齢を返す関数があります。ここで、ユーザーの年齢が 30 歳未満であるかどうかを確認して、「このページを表示するには若すぎます」というメッセージを出力し、残りの質問に引き続き回答するかどうかを尋ねる必要があります。次に、答えに従って決定を下します。答えが「はい」の場合、以下に示すように続行します。今思うのですが、ユーザーが「いいえ」と言ったらどうなるでしょうか。コードを中断するにはどうすればよいですか?

たとえば、PHP では、「exit()」と入力していました。

前もって感謝します。

        if (ma.HowOldImI(date1, date2) < 30)
        {
            Console.WriteLine("you are too young to view this page");

            Console.WriteLine("would you like to continue the session?");

            string confirm = Console.ReadLine();

            if (confirm == "yes")
            {
                Console.WriteLine("Please type your name");
                string nm = Console.ReadLine();
                Console.WriteLine("Please type your born year");
                int ag = Convert.ToInt16(Console.ReadLine());

                gr.YouWereBorn(nm, ag);
            }
        }
        else
        {
            Console.WriteLine("You are " + ma.HowOldImI(date1, date2) + " years old\n");
        }
4

4 に答える 4

3

関数を終了したい場合は、「return;」を実行してください。

例えば

    if (ma.HowOldImI(date1, date2) < 30)
    {
        Console.WriteLine("you are too young to view this page");

        Console.WriteLine("would you like to continue the session?");

        string confirm = Console.ReadLine();

        if (confirm == "yes")
        {
            Console.WriteLine("Please type your name");
            string nm = Console.ReadLine();
            Console.WriteLine("Please type your born year");
            int ag = Convert.ToInt16(Console.ReadLine());

            gr.YouWereBorn(nm, ag);
        }
        else
        {
            return;
        }
    }
    else
    {
        Console.WriteLine("You are " + ma.HowOldImI(date1, date2) + " years old\n");
    }

現在のメッセージ ポンプを停止する必要がある場合は、次を使用Application.Exit();してください。適切なコードでアプリケーションを終了したい場合は、以下を使用してください。Environment.Exit(0); この記事では、2 つの違いの概要を説明します。

于 2012-08-06T13:51:42.240 に答える
2

他のユーザーによって既に言われているいくつかのオプションがありますが、私の目的は、どのオプションがあなたの状況に最適かを説明することです.

まず、コンソール アプリケーションを使用していると仮定しています (純粋にConsole.ReadLine().

これを念頭に置いて、Main(string args[])どこかにメソッドがあることを知っています。最初の質問は、コード スニペットがこのMain()関数で直接使用されているかどうかです。

その場合、すでにご存知かもしれませんが、プログラムが関数の最後に到達すると、プログラムは終了します。ただし、 returnステートメントを使用すると、任意の関数のフローを途中で終了できることを知っておくと役立ちます。

return ステートメントは、それが表示されているメソッドの実行を終了し、呼び出し元のメソッドに制御を返します。オプションの式の値を返すこともできます。メソッドが void 型の場合、return ステートメントは省略できます。

この場合voidは が使用されるため、簡単に使用できます。

return;

たとえば、次のように言うのとは対照的です。

return "a string";

コード ロジックが別の関数 (関数によって呼び出されるmain()関数) にある場合は、関数から単純に戻ってプログラムを終了することはできません (ただし、それは結果である可能性があります)。実行されます。

などの他の方法が提案されておりApplication.Exit()Environment.Exit()アプリケーションを終了するという望ましい効果が得られますが、ユーザーに良いフィードバックが得られないため、これらを直接使用しないことをお勧めします。ただし、アプリケーションを終了する小さなラッパー関数を作成することもできます。次に例を示します。

public void EndApplication()
{
   Console.WriteLine("You have chosen to end the application, hit enter to say Goodbye...");
   Console.ReadLine();
   Environment.Exit(0);
}

これは、選択した任意の場所から呼び出すことができます (必要に応じて、別のエラー コードをいくつか示します)。

ただし、アプリケーションが関数を自然に流れMain()、最後に別れのメッセージが表示されるようにしたいと思います。return;サブ関数内でステートメントを使用することを選択します。たとえば、次のようになります。

public void Main(string[] args)
{
   DoMyWork();

   Console.WriteLine("You have chosen to end the application, hit enter to say Goodbye...");
   Console.ReadLine();
}

private void DoMyWork()
{
   //...

   string confirm = Console.ReadLine();

   if(confirm.ToLower() == "no")
   {
      return;//no need to continue with this function
   }

   //carry on with you logic
   Console.WriteLine("Please type your name");

   //...
} 
于 2012-08-06T14:24:07.710 に答える
0

このコードで試すことができます-リターンを追加

    if (confirm == "yes")
    {
        Console.WriteLine("Please type your name");
        string nm = Console.ReadLine();
        Console.WriteLine("Please type your born year");
        int ag = Convert.ToInt16(Console.ReadLine());

        gr.YouWereBorn(nm, ag);
    }
    else
    {
        return;
    }
于 2012-08-06T13:53:11.553 に答える
0

ユーザーがいいえと言った場合、コードをよく見てください。名前などを入力してくださいのロジックはスキップされ、関数は終了します。そうでない場合は、誰もが言うように次のようにします。

return;
于 2012-08-06T13:52:30.207 に答える