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

本文关键字:默认值 永远 分配 字段 | 更新日期: 2023-09-27 18:04:00

我在我的代码中得到以下错误,我不知道为什么:

警告- '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字段,正如您所示。希望如何设置该值?你真的是想把它设置为基于iCorrectACountiCurrentQIndexMainForm吗?

你怎么能指望它会是(Difficulty) 0计算结果之外的任何东西呢?

在我看来,从静态访问的表单实例中提取初始值也是很危险的。如果构造函数接受构造它的初始值,那就更好了。

m_difficulty是私有的,所以它不能从外部访问你的类,但你永远不会在内部分配它,所以它永远不会改变。

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

应该总是在声明变量之后初始化它。

private Difficulty m_difficulty = new Difficulty();

差不多。

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

警告只是告诉你这些

这听起来像你期望m_difficulty绑定到用户表单上的下拉选择。事实并非如此。即使是这样,您也希望访问SelectedValue属性,而不是对象本身。也许这就是你要找的。

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