none
「error CS0165: 未割り当てのローカル変数」と「Environment.Exit(-1);」 RRS feed

  • 質問

  • C#をcsc.exeで勉強中です。こちらでいけなかったらご指摘ください。

    お世話になります。よろしくお願いいたします。

    以下のコードで「so_a = a; so_b = b;」の部分がないとコンパイルで「error CS0165: 未割り当てのローカル変数 'so_a'が使用されました。」となります。「Environment.Exit(-1);」の前でも後でもよいようになっています。「Environment.Exit(-1);」を終了コードとして認識していないのでしょうか。

    using System;
    using System.Windows.Forms;

     class main
    {
       static void Main()
       {
          string a = "ah";
       string b = "yah";
          string so_a, so_b;
          Console.WriteLine("a: {0}\nb: {1}", a, b);
          if ((a != null) || (b != null))
       {
         MessageBox.Show("Not null");
      so_a = a; so_b = b;
       } 
       else { MessageBox.Show("null"); Environment.Exit(-1); so_a = a; so_b = b; }  // so_a = a; so_b = b;
       Console.WriteLine("a: {0}\nb: {1}", a, b);
       Console.WriteLine("so_a: {0}\nso_b: {1}", so_a, so_b);
       Console.ReadKey();
       }
    }

    2015年6月21日 22:48

回答

  • Evnironment.Exit()はドキュメントにあるように例外を返す可能性があり終了コードとみなされることはありません。加えて、成功した場合はそのままプロセスが終了してしまうためfinally句などが実行されません。ですので個人的にはEnvironment.Exit()はお勧めしません。
    • 回答の候補に設定 星 睦美 2015年6月22日 4:30
    • 回答としてマーク 星 睦美 2015年6月23日 8:01
    2015年6月21日 23:15
  • 先ほど思いついた(見かけた?)、他の方法は、Mainに戻り値を設定して、returnで戻る方法でしょうか?

    別に返値は必須ではないですが(C#では、Mainの返値はvoidとintのいずれかとなっています)、それが基本ですね。

    // voidの場合明示的にreturnすることも無いことも多いですが。

    • 回答の候補に設定 星 睦美 2015年6月22日 8:28
    • 回答としてマーク 星 睦美 2015年6月23日 8:01
    2015年6月22日 4:02

すべての返信

  • Evnironment.Exit()はドキュメントにあるように例外を返す可能性があり終了コードとみなされることはありません。加えて、成功した場合はそのままプロセスが終了してしまうためfinally句などが実行されません。ですので個人的にはEnvironment.Exit()はお勧めしません。
    • 回答の候補に設定 星 睦美 2015年6月22日 4:30
    • 回答としてマーク 星 睦美 2015年6月23日 8:01
    2015年6月21日 23:15
  • 佐祐理さん、返信とても感謝いたします。Control_Makerです。(以前からながらくですが)検索してみているのですが、コンソールプログラムでの終了のメソッドが見当たりません。

    先ほど思いついた(見かけた?)、他の方法は、Mainに戻り値を設定して、returnで戻る方法でしょうか?他に見当たりません。ご助言願います。よろしくお願いいたします。

    2015年6月22日 3:14
  • 先ほど思いついた(見かけた?)、他の方法は、Mainに戻り値を設定して、returnで戻る方法でしょうか?

    別に返値は必須ではないですが(C#では、Mainの返値はvoidとintのいずれかとなっています)、それが基本ですね。

    // voidの場合明示的にreturnすることも無いことも多いですが。

    • 回答の候補に設定 星 睦美 2015年6月22日 8:28
    • 回答としてマーク 星 睦美 2015年6月23日 8:01
    2015年6月22日 4:02
  • Hongliangさんも説明されていますが、

    Main()の戻り値に説明があります。

    # タイトルもほぼそのままですし、少しググればドキュメントを見つけることはできたと思います。

    2015年6月22日 4:11
  • 戻り値なしでreturn可能なんですね。returnを検索するとしっかり載っていますね。申し訳ありません。そしてありがとうございました。

    2015年6月22日 8:34
  • Hongliangさん初めまして。ありがとうございました。returnに戻り値がいらないとご指摘がなければ気づかなかったかもしれません。ネットだけでプログラミングを行っていて近くにプログラムを作っている人が一人もいないのでこんなことになってしまうことがとても多いんですね。感謝を意を伝えたくあえて返信を致しました。ありがとうございました。

    2015年6月22日 8:48