【问题标题】:Field is never assigned to and will always have its default value 0字段永远不会分配给并且将始终具有其默认值 0
【发布时间】:2013-03-15 23:14:19
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 我不确定如何为您进一步澄清。您开始在构造函数中检查 m_difficulty 的内容,但从未在该字段中设置值。

标签: c# winforms


【解决方案1】:

编译器是完全正确的:什么都没有会改变你的m_difficulty字段,正如你所展示的那样。您期望设置什么值?您是否真的打算根据iCorrectACountiCurrentQIndex 将其设置为基于MainForm 的东西?

除了(Difficulty) 0 的评估结果之外,您如何期望它会是其他任何东西?

从静态访问的表单实例中提取初始值也很狡猾,IMO。如果构造函数接受任何构造它的初始值会更好。

【讨论】:

  • 我希望 m_difficulty 等于 Difficulty.EasyDifficulty.MediumDifficulty.Hard,具体取决于用户选择的内容(对应于每个难度级别的三个按钮)
  • @user2141272:在新表单上?当然,您应该有一个用于更改该单选按钮(或其他)的事件,并将其分配到那里。但是在构造函数中它永远不会是一个不同的值,对吧?
  • 不,在构造函数中它不会有所不同,只是希望它反映用户选择的内容。每个按钮都有一个包含 OnDifficultySelected(Difficulty.Easy); 的事件处理程序(MediumHard 相同)
  • @user2141272:但是您是否了解您提供的代码不会在那时运行。它在您创建新实例时运行,此时m_difficulty 始终具有其默认值。你希望modifier 怎么调整?您希望构造函数中的代码有什么好处?感觉你对构造函数中的代码何时执行感到困惑。
  • 老实说,我有点困惑。它源于这里的这个问题 - stackoverflow.com/questions/15422270/…
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    private Difficulty m_difficulty = new Difficulty();
    

    类似的东西。

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

    警告只是告诉你这一点。

    【讨论】:

    • 从外观上看,它是一个枚举 - 这里不涉及任何无效性。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多