我理解代码的问题。 我在Unity中学习编码,我对C#知之甚少,但有些东西引起了我的注意 - 当然我们首先声明变量int(没有设置任何值)然后我们在if语句中使用它。
我读了here ,不允许在C#中使用未初始化的变量。我自己在另一个项目中检查了它。我认为这是因为结构(不是类),但我不知道为什么会对变量产生影响......
因为有很多不必要的代码我会把它放在外面(pastebin)server - 带有这个变量的代码被设置为注释(为了更好的可见性)。
在这里,我只会放置这些碎片(对于那些不想浪费时间来完成整个混乱的人)。
private int questionsFinished;
[...]
if(questionsFinished < questionNumbersChoosen.Length - 1)
{
moveToNextQuestion();
questionsFinished++;
}
public void moveToNextQuestion()
{
assignQuestion(questionNumbersChoosen[questionNumbersChoosen.Length - 1 - questionsFinished]);
}
我只是不明白它为什么工作 - 变量没有价值,是吗? 提前谢谢你们。
答案 0 :(得分:2)
questionsFinished确实有一个值 - 因为它是你班上的一个字段。除非您明确设置字段,否则字段将初始化为其默认值。在这种情况下,questionsFinished将初始化为0,因为它是一个int。数值类型默认为0,bools为false,字符串和引用类型默认为null,根据构造函数构造为默认值。
通过变量,它们表示方法中的局部变量。
Eric Lippert的精彩解释:
Why do local variables require initialization, but fields do not?
本质上 - 如果你没有初始化一个局部变量,它很可能是一个错误,编译器正在帮助你。具有默认值的字段是一种流行的情况,因此编译器假定您是故意这样做的,并且不会引发错误。
答案 1 :(得分:1)
questionsFinished
是字段,而不是本地变量,因此 不需要进行初始化。不过,这是一个好习惯。
通常,编译器无法确定性地判断在使用之前是否将字段设置为值(因为公共字段可以在外部初始化),因此它不会生成错误。
字段初始化为默认值,int
为0。