Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 数组值自动重置_C#_Winforms_Visual Studio_Visual Studio 2013 - Fatal编程技术网

C# 数组值自动重置

C# 数组值自动重置,c#,winforms,visual-studio,visual-studio-2013,C#,Winforms,Visual Studio,Visual Studio 2013,好吧,这个愚蠢的问题与帖子有关。我所做的基本上是删除了返回,并且能够根据组合框选择索引设置xValues数组的值。根据这张照片 但是,当我尝试调用另一个方法将某些变量除以xValues.Length时,它会将“System.DivideByZeroException”错误作为xValues和xValues.Length的值重置为零。以下是代码片段: int[] xValues = { }; //declaring empty array private void comboBox1_Selec

好吧,这个愚蠢的问题与帖子有关。我所做的基本上是删除了返回,并且能够根据组合框选择索引设置xValues数组的值。根据这张照片 但是,当我尝试调用另一个方法将某些变量除以xValues.Length时,它会将“System.DivideByZeroException”错误作为xValues和xValues.Length的值重置为零。以下是代码片段:

int[] xValues = { }; //declaring empty array

private void comboBox1_SelectedValueChanged(object sender, EventArgs e) //using selection
                                                                        //to set the xValues
{
      if (comboBox1.SelectedIndex == 0)
    {
        int[]xValues= { 1, 2, 3, 4, 5 };

    }
    else if (comboBox1.SelectedIndex == 1)
    {
       int[] xValues = { 6, 7, 8, 9, 10 };

    }
    else if (comboBox1.SelectedIndex == 2)
    {
        int[] xValues = { 11, 12, 13, 14, 15 };

    }        
}
然后假设我调用了一个doSomeThing方法


为什么以及如何重置xValues的值?

您没有重置任何内容。您可以声明一个新的int数组,如中所示:每次选定值更改时都会声明一个新对象!这就是为什么另一个方法中的数组长度始终为0:因为它仍然是全局空int数组

int[] xValues = { }; //declaring empty array

private void comboBox1_SelectedValueChanged(object sender, EventArgs e) //using selection
                                                                        //to set the xValues
{
      if (comboBox1.SelectedIndex == 0)
    {
        xValues= new int[] { 1, 2, 3, 4, 5 };

    }
    else if (comboBox1.SelectedIndex == 1)
    {
       xValues = new int[] { 6, 7, 8, 9, 10 };

    }
    else if (comboBox1.SelectedIndex == 2)
    {
        xValues = new int[] { 11, 12, 13, 14, 15 };

    }        
}

这应该可以解决问题。

waka的答案是正确的,关于什么是错误的-您正在声明完全独立于实例变量的新局部变量

然而,waka的修正并不完全正确——您只能在声明变量时以这种特定的方式初始化数组。要将新值分配给变量,需要稍微不同的语法:

xValues = new[] { 1, 2, 3, 4, 5 };
或者,如果要显式指定元素类型:

xValues = new int[] { 1, 2, 3, 4, 5 };

如果xValues数组的长度始终为5,则将其设置为5。即

int[] xValues =new int[5];
然后在if语句中,只需为xValues数组分配新值,即

xValues =new {1,2,3,4,5};
你从来没有告诉过计算机阵列有多大。但是说

  int[]xValues xValues =new {1,2,3,4,5}

您正在更改该变量的范围;您实际上没有引用原始的xValues数组

我已经尝试过了,但它不起作用..:一旦我这样做,xValues={1,2,3,4,5};它强调了所有的价值观并告诉我;预期。检查屏幕截图。当然,Jon Skeet在如何为数组分配新值方面是正确的。我会相应地修改我的答案。哇。。。你是对的,伙计。。。lol缺少一个语法。。它现在工作了…:谢谢,请不要添加与问题其余部分无关的截图。第二个没有显示您的问题所询问的代码。我添加的只是为了表明这不起作用。。。删除:感谢@Richard Barker我更喜欢使用xValues.Length,因为如果值的数量更改为5个以上,我可以在以后更轻松地更新代码。Length将自动更新
  int[]xValues xValues =new {1,2,3,4,5}