2

コードで次のエラーが発生しましたが、理由がわかりません。

警告 -'SummaryForm.m_difficulty' is never assigned to, and will always have its default value 0

コード

public partial class SummaryForm : Form
{
    // Declares variables with the values pulled from the 'MainForm'
    int iCorrectACount = MainForm.iCorrectACount;
    int iCurrentQIndex = MainForm.iCurrentQIndex;

    private Difficulty m_difficulty;

    public SummaryForm()
    {

        InitializeComponent();

        double modifier = 1.0;
        if (m_difficulty == Difficulty.Easy) { modifier = 1.0; }
        if (m_difficulty == Difficulty.Medium) { modifier = 1.5; }
        if (m_difficulty == Difficulty.Hard) { modifier = 2; }

        // Sets the labels using integer values
        lblCorrectNum.Text = iCorrectACount.ToString();
        lblWrongNum.Text = (iCurrentQIndex - iCorrectACount).ToString();
        lblScoreTotal.Text = (iCorrectACount * modifier).ToString();
    }

たぶん、これはなぜlblScoreTotal.Text値*修飾子に変更されないのに、別の形式に変更されるのかと関係がありますか?

ここでこの質問をした理由は、誰かが警告メッセージを無効にするようにアドバイスしたが、それが適切な解決策だとは思わなかったためです。

ありがとう。

4

4 に答える 4

4

m_difficultyプライベートなので、クラスの外部からアクセスすることはできませんが、内部で割り当てることはないため、変更されることはありません。

したがって、常に 0 になるため、比較してもあまり意味がありません。

于 2013-03-15T14:47:03.847 に答える
4

コンパイラは完全に正しいです。あなたが示した限り、あなたの分野を変えるものは何もありません。その値を設定するm_difficultyとどうなりますか? と に基づいて、実際に何かに設定するつもりでしたか?MainFormiCorrectACountiCurrentQIndex

(Difficulty) 0評価されるもの以外のものになるとどのように期待しますか?

静的にアクセスされたフォームのインスタンスから初期値を取得するのもかなり危険です.IMO. コンストラクターがそれを構築しているものから初期値を受け入れれば、はるかに良いでしょう。

于 2013-03-15T14:46:41.390 に答える
0

m_difficulty がユーザーフォームのドロップダウン選択にバインドされることを期待しているように思えます。そうではない。その場合でも、オブジェクト自体ではなく、SelectedValue プロパティにアクセスする必要があります。多分これはあなたが探しているものです。

Difficulty m_difficulty = (Difficulty)Enum.Parse(ddDifficulty.SelectedValue); 
于 2013-03-15T15:10:28.237 に答える
0

変数を宣言した後は、常に変数を初期化する必要があります。

private Difficulty m_difficulty = new Difficulty();

そんな感じ。

そのため、null になることはありません (この場合、例外が発生します)。

警告はこれを示しているだけです。

于 2013-03-15T14:47:20.837 に答える