在List中添加对象

时间:2015-07-17 19:03:15

标签: c#

当我从组合框中选择一个名为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; 
        }
    }
}

有什么问题?

2 个答案:

答案 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];
        ...