字段永远不会分配给,并且始终具有默认值0

时间:2013-03-15 14:44:44

标签: c# winforms

我的代码中出现以下错误,我不确定原因:

警告 - '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 个答案:

答案 0 :(得分:4)

编译器是完全正确的:没有将改变你的m_difficulty字段,就你所示。您期望设置该值的是什么?您是否真的打算根据MainForm iCorrectACountiCurrentQIndex将其设置为某个内容?

除了(Difficulty) 0评估为什么之外,你怎么看待它?

从静态访问的表单实例中提取初始值也是非常狡猾的,IMO。如果构造函数接受构造它的任何东西的初始值,那会好得多。

答案 1 :(得分:4)

m_difficulty是私有的,因此无法从您的课外访问,但您从未将其分配到内部,因此它永远不会更改。

因此,比较它没有任何意义,因为它总是等于0。

答案 2 :(得分:0)

您应该在声明变量后始终初始化变量。

private Difficulty m_difficulty = new Difficulty();

类似的东西。

所以你要阻止它为null(在这种情况下你会得到一个例外)。

警告只是告诉你这个。

答案 3 :(得分:0)

听起来像你一样,期待m_difficulty被绑定到用户表单上的下拉选项。它不是。即使它是,您也希望访问SelectedValue属性而不是对象本身。也许这就是你正在寻找的东西。

Difficulty m_difficulty = (Difficulty)Enum.Parse(ddDifficulty.SelectedValue);