在List中添加对象
本文关键字:对象 添加 List | 更新日期: 2023-09-27 18:03:21
当我从一个名为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);
}
}
}
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;
}
}
}
怎么了?
由于您在循环之外创建了int[] vgen
,因此每次执行lvar.Add(var)
(其中var.Var = vgen
)时,您都指向相同的变量(int[] vgen
)。
但与此同时,在每个循环中,你都在改变int[] vgen
的值(覆盖之前的值)。
代码一点也不好。正如其他人指出的那样,6个嵌套循环将是调试的噩梦。但话虽如此,我想一个简单的解决方案是在循环中声明int[] vgen
,它将为您工作。
Edit:正如@crashmstr指出的,另一种使其工作的方法是使用var.Var[0] = i0
等(而不是使用vgen[0] = i0
)。不需要在循环中重新声明int[] vgen
,因为它已经在Varianta
中初始化了。
您需要先清除列表。当前事件一个接一个地添加条目。
private void cmbMaxim_SelectedIndexChanged(object sender, EventArgs e)
{
lvar.Clear();
int[] vgen = new int[6];
...