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不会更改为 value * 修饰符但会更改为另一种形式有关?

我在这里问这个问题的原因是有人建议我禁用警告消息,但我认为这不是合适的解决方案?

谢谢。

4

4 回答 4

4

m_difficulty是私有的,因此无法从您的班级外部访问它,但您永远不会在内部分配它,因此它永远不会改变。

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

于 2013-03-15T14:47:03.847 回答
4

编译器是完全正确的:就你所展示的而言,没有什么会改变你的领域。m_difficulty希望设置该值是什么?您是否真的打算将其设置为基于MainFormasiCorrectACount和的东西iCurrentQIndex

您如何期望它会是除了(Difficulty) 0评估为之外的任何东西?

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

于 2013-03-15T14:46:41.390 回答
0

在声明变量后,您应该始终对其进行初始化。

private Difficulty m_difficulty = new Difficulty();

类似的东西。

所以你阻止它为空(在这种情况下你会得到一个异常)。

警告只是告诉你这一点。

于 2013-03-15T14:47:20.837 回答
0

在我看来,您希望 m_difficulty 绑定到您的用户表单上的下拉选择。它不是。即使是这样,您也希望访问 SelectedValue 属性而不是对象本身。也许这就是你要找的。

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