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