2013-03-15 42 views
2

我碰到下面的錯誤在我的代碼,我不知道爲什麼:場從未分配,將永遠有它的默認值0

警告 - '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不會更改爲值*修飾符,但會在另一個表單上有關係?

我在這裏問這個問題的原因是因爲有人建議我禁用警告消息,但我不認爲這是合適的解決方案?

謝謝。

+0

我不確定如何爲您進一步闡明。你開始在你的構造函數中檢查'm_difficulty'的內容,但是沒有任何東西*會在該字段中設置一個值。 – 2013-03-15 14:48:09

回答

5

編譯器是完全正確的:什麼都沒有將會改變你的m_difficulty字段,就像你所示的那樣。你想預計設置該值?你是否真的想把它設置爲MainForm根據iCorrectACountiCurrentQIndex

你認爲它會是什麼以外的任何(Difficulty) 0評估爲?

從靜態訪問的表單實例中抽取初始值也是非常不妥的,IMO也是如此。如果構造函數接受來自構造函數的初始值,會更好。

+0

根據用戶的選擇,我想'm_difficulty'等於'Difficulty.Easy','Difficult.Medium'或'Difficulty.Hard' – user2141272 2013-03-15 14:51:01

+0

@ user2141272:在新窗體上?當然,你應該爲這個無線電按鈕(或其他)進行更改,並將其分配到那裏。但是*在構造函數中*它永遠不會是一個不同的值,對吧? – 2013-03-15 14:53:43

+0

不,在構造函數中它不會有所不同,只是希望它反映用戶選擇的內容。每個按鈕都有一個事件處理程序,它包含'OnDifficultySelected(難度。簡單);'(相同的「中」和「硬」) – user2141272 2013-03-15 14:55:51

4

m_difficulty是私人的,所以它不能從你的課堂以外訪問,但你永遠不會分配它,所以它永遠不會改變。

因此,它並沒有真正意義上的比較它,因爲它總是會等於0

0

你應該總是初始化變量聲明你之後。

private Difficulty m_difficulty = new Difficulty(); 

就是這樣的。

所以你防止它爲空(在這種情況下,你會得到一個例外)。

該警告只是告訴你這一點。

+0

這是一個枚舉,看起來它 - 這裏沒有涉及無效。 – 2013-03-15 14:47:37

0

這聽起來像你期待m_difficulty綁定到您的用戶表單上的下拉選擇。不是這樣。即使它是,你也會想要訪問SelectedValue屬性而不是對象本身。也許這就是你要找的。

Difficulty m_difficulty = (Difficulty)Enum.Parse(ddDifficulty.SelectedValue); 
相關問題