我的代码中出现以下错误,我不确定原因:
警告 - '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 :(得分:4)
编译器是完全正确的:没有将改变你的m_difficulty
字段,就你所示。您期望设置该值的是什么?您是否真的打算根据MainForm
iCorrectACount
和iCurrentQIndex
将其设置为某个内容?
除了(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);