none
エラー修正方法を教えてください。 お願いします。 RRS feed

  • 質問

  • 現在、Visual Studio2017を使っている初心者です。

    下記を入力するとエラーが発生してしまいました。

    エラー内容

    抑制状態 警告 CS0414 フィールド 'FormTimer.nowTime' が割り当てられていますが、値は使用されていません。 Timer アクティブ

            

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Timer
    {
        public partial class FormTimer : Form
        {
            int endTime; //終了時間
            int nowTime; //経過時間

            public FormTimer()
            {
                InitializeComponent();
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {

            }

            //ボタンクリック時の処理
            private void buttonStart_Click(object sender, EventArgs e)
            {
                //時間設定のTextBoxの内容を終了時間の変数に取得
                if (!int.TryParse(textSetTime.Text, out endTime))
                {
                    endTime = 1;
                }

                //残り時間を計算するための変数を0で初期化

                nowTime = 0;

                //タイマースタート
                timerControl.Start();
            }

            private void FormTimer_Load(object sender, EventArgs e)
            {

            }
        }
    }

    2018年2月24日 14:52

回答

  • これはnowTimeという変数に値を設定しているのに、何処からも読み取っていないという警告です。
    何処かにnowTime変数を読み取る処理、たとえば if (nowTime == 10){ MessageBox.Show("Test"); } のような処理を書いてあればこの警告は消えてくれます。

    通常の変数は値を設定したら少なくとも1か所は読み出す処理があるものです。
    それなのに読み出されていないというのは何かミスがあるのかもしれないですよとコンパイラが教えてくれているのです。
    #endTimeも設定しかしていないように見えるかもしれませんが、TryParseで使用されているとみなされています。

    文法間違いだとコンパイラは間違いをエラーとして検出できますが、プログラマが意図している事と違っているかもしれない処理を見つけた場合には、コンパイラは正しいのか間違いなのかを判断できないために警告として通知してくれます。
    エラーだとコンパイルが失敗するためプログラムを実行することはできませんが、コンパイル可能な警告はそのままでも実行可能です。

    プログラムの途中に不完全な状態であっても確認のためにコンパイルしてみることはよくありますが、そのような意図的に読み取る処理が未実装であることが確実であるのであれば無視しても構いません。
    ただし、最終的には警告はなくすようにした方が良いものです。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年2月24日 15:18

すべての返信

  • これはnowTimeという変数に値を設定しているのに、何処からも読み取っていないという警告です。
    何処かにnowTime変数を読み取る処理、たとえば if (nowTime == 10){ MessageBox.Show("Test"); } のような処理を書いてあればこの警告は消えてくれます。

    通常の変数は値を設定したら少なくとも1か所は読み出す処理があるものです。
    それなのに読み出されていないというのは何かミスがあるのかもしれないですよとコンパイラが教えてくれているのです。
    #endTimeも設定しかしていないように見えるかもしれませんが、TryParseで使用されているとみなされています。

    文法間違いだとコンパイラは間違いをエラーとして検出できますが、プログラマが意図している事と違っているかもしれない処理を見つけた場合には、コンパイラは正しいのか間違いなのかを判断できないために警告として通知してくれます。
    エラーだとコンパイルが失敗するためプログラムを実行することはできませんが、コンパイル可能な警告はそのままでも実行可能です。

    プログラムの途中に不完全な状態であっても確認のためにコンパイルしてみることはよくありますが、そのような意図的に読み取る処理が未実装であることが確実であるのであれば無視しても構いません。
    ただし、最終的には警告はなくすようにした方が良いものです。


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2018年2月24日 15:18
  • 返信が遅くなり申し訳ございません。

    回答ありがとうございます。おかげさまで問題が解決しました。

    今後も何卒、宜しくお願い致します。

    2018年2月26日 15:18