字段永远不会被分配,并且始终具有其默认值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
不会改变为值*修饰符,但会以另一种形式?
我问这个问题的原因是因为有人建议我禁用警告消息,但我不认为这是合适的解决方案?
谢谢。
编译器是完全正确的:没有任何将改变您的m_difficulty
字段,正如您所示。希望如何设置该值?你真的是想把它设置为基于iCorrectACount
和iCurrentQIndex
的MainForm
吗?
你怎么能指望它会是(Difficulty) 0
计算结果之外的任何东西呢?
在我看来,从静态访问的表单实例中提取初始值也是很危险的。如果构造函数接受构造它的初始值,那就更好了。
m_difficulty
是私有的,所以它不能从外部访问你的类,但你永远不会在内部分配它,所以它永远不会改变。
因此,比较它是没有意义的,因为它总是等于0。
应该总是在声明变量之后初始化它。
private Difficulty m_difficulty = new Difficulty();
差不多。
所以你阻止它为空(在这种情况下你会得到一个异常)。
警告只是告诉你这些
这听起来像你期望m_difficulty绑定到用户表单上的下拉选择。事实并非如此。即使是这样,您也希望访问SelectedValue属性,而不是对象本身。也许这就是你要找的。
Difficulty m_difficulty = (Difficulty)Enum.Parse(ddDifficulty.SelectedValue);