C# 索引处的数组元素始终返回0

C# 索引处的数组元素始终返回0,c#,unity3d,C#,Unity3d,我想更改数组中特定位置的简单值,但即使数组中的值不是0,在尝试更改值时,也会变为0。 这在一个简单的循环中发生,如: for (int i = 0; i < 4; i++) { int stat = child[i]; // stat becomes 0 even if child[i] is != 0 // some calculation on stat here } for(int i=0;i

我想更改数组中特定位置的简单值,但即使数组中的值不是0,在尝试更改值时,也会变为0。 这在一个简单的循环中发生,如:

for (int i = 0; i < 4; i++)
{
    int stat = child[i];   // stat becomes 0 even if child[i] is != 0
    // some calculation on stat here
}
for(int i=0;i<4;i++)
{
int stat=child[i];//即使child[i]为!=0,stat也变为0
//关于stat的一些计算
}
我使用VS17调试器试图了解它到底发生了什么,但我仍然不知道为什么会发生这种情况。在我的应用程序中,我已经为数组中的元素设置了其他变量,但这是我第一次看到类似的情况。 根据调试器,
stat=0
,即使
child[i]!=0


这种情况发生时,考虑到所有的循环。我确信这是我缺少的东西,但我真的无法得到它是什么。

当调试器像那样停在这一行时,它还没有执行那一行代码。由于该行尚未执行,
stat
未分配
child[i]
的值,调试器仅显示整数(0)的默认值。它工作得很好。如果要查看值的更改,请转到下一条语句。

当调试器在该行停止时,它尚未执行该行代码。由于该行尚未执行,
stat
未分配
child[i]
的值,调试器仅显示整数(0)的默认值。它工作得很好。如果要查看值的更改,请转到下一条语句。

您需要执行代码行。您在更新
stat
的值之前就停止了。您需要转到下一行以查看后面的值。请阅读我对另一个答案的答复,请阅读d Debug.Log(string.Format(“stat is{0}”,stat));我打赌不是零。当变量赋值是循环中的唯一语句时,很难说作用域是什么。循环中的哪个点是范围内的
stat
,并且有它的值?此状态中不存在任何语句。通过添加一个Debog.Log语句,您将引入一个具有这些属性的语句(stat在范围post赋值中),您需要执行代码行。您在更新
stat
的值之前就停止了。您需要转到下一行以查看后面的值。请阅读我对另一个答案的答复,请阅读d Debug.Log(string.Format(“stat is{0}”,stat));我打赌不是零。当变量赋值是循环中的唯一语句时,很难说作用域是什么。循环中的哪个点是范围内的
stat
,并且有它的值?此状态中不存在任何语句。通过添加一个Debog.Log语句,您将引入一个具有这些属性的语句(stat在范围post赋值中),我知道,但即使在执行代码之后,“stat”仍然是0。我知道这一点,因为返回的子项在索引0-3处有0。Oherwise我不会有任何问题…请记住,每次循环时,变量
stat
get都会重新初始化。因此,如果不在该行之后但在循环再次返回之前停止并检查值,则不会看到更改。从调试器停止的位置,点击F10,调试器应该移动到右大括号。然后检查
stat
的值。这应该是您所期望的。@Koosshh56您可能应该更改您当时提供的屏幕截图,因为这是最明显的问题——您尚未执行代码行。此外,您描述的代码不是“更改”子级,而是“读取”。此外,您还没有说明如何观察到传入的数组的值没有被修改。(例如,是否将数组的副本传递给了checkValidityStats?)我知道,但即使在执行代码之后,“stat”仍然是0。我知道这一点,因为返回的子项在索引0-3处有0。Oherwise我不会有任何问题…请记住,每次循环时,变量
stat
get都会重新初始化。因此,如果不在该行之后但在循环再次返回之前停止并检查值,则不会看到更改。从调试器停止的位置,点击F10,调试器应该移动到右大括号。然后检查
stat
的值。这应该是您所期望的。@Koosshh56您可能应该更改您当时提供的屏幕截图,因为这是最明显的问题——您尚未执行代码行。此外,您描述的代码不是“更改”子级,而是“读取”。此外,您还没有说明如何观察到传入的数组的值没有被修改。(例如,是否将数组的副本传递给了checkValidityStats?)