当我从组合框中选择一个名为cmbMaxim的项目时,我想在List <T>
中添加对象。问题是我获得了一个具有相同对象的列表(添加了最后一个对象)。看起来新操作员不会工作,我获得了对同一个对象的引用。这是代码:
public partial class Form1 : Form
{
List<Varianta> lvar = new List<Varianta>();
int contor = 0;
public Form1()
{
InitializeComponent();
}
private void cmbMaxim_SelectedIndexChanged(object sender, EventArgs e)
{
int[] vgen = new int[6];
int vmax = Convert.ToInt32(cmbMaxim.Text);
for (int i0 = 1; i0 < vmax - 4; i0++)
for (int i1 = i0 + 1; i1 < vmax - 3; i1++)
for (int i2 = i1 + 1; i2 < vmax - 2; i2++)
for (int i3 = i2 + 1; i3 < vmax - 1; i3++)
for (int i4 = i3 + 1; i4 < vmax; i4++)
for (int i5 = i4 + 1; i5 < vmax + 1; i5++)
{
Varianta var = new Varianta();
vgen[0] = i0;
vgen[1] = i1;
vgen[2] = i2;
vgen[3] = i3;
vgen[4] = i4;
vgen[5] = i5;
contor++;
var.Var = vgen;
var.Index = contor;
lvar.Add(var);
}
}
}
Class Varianta是:
class Varianta
{
int[] var = new int[6];
int index;
int scor=0;
int eliminate=0;
public int Scor
{
get
{
return scor;
}
set
{
scor = value;
}
}
public int Index
{
get
{
return index;
}
set
{
index = value;
}
}
public int [] Var
{
get
{
return var;
}
set
{
var = value;
}
}
}
有什么问题?
答案 0 :(得分:1)
由于您在循环中创建typist = document.querySelector "#typist-element"
new Typist typist,
letterInterval: 60
textInterval: 3000
,因此每次执行int[] vgen
(其中lvar.Add(var)
)时,您都指向同一个变量(var.Var = vgen
)。
但与此同时,在每个循环中,您都在更改int[] vgen
的值(覆盖之前的值)。
代码根本不行。正如其他人所指出的,6个嵌套循环将成为调试的噩梦。但话虽如此,我想一个简单的解决方案就是在循环内声明int[] vgen
,这对你有用。
编辑,正如@crashmstr指出的那样,另一种使其工作的方法是使用int[] vgen
等等(而不是使用var.Var[0] = i0
)。无需在循环内重新声明vgen[0] = i0
,因为它已在int[] vgen
内初始化。
答案 1 :(得分:0)
您需要先清除列表。目前,该活动一个接一个地添加项目。
private void cmbMaxim_SelectedIndexChanged(object sender, EventArgs e)
{
lvar.Clear();
int[] vgen = new int[6];
...