0

这是我的示例代码:

private void button1_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();
        foreach (var i in numbers())
        {
            listBox1.Items.Add(i);
        }
    }

    private List<int> numbers()
    {
        List<int> counts = new List<int>();
        for (int i = 1; i <= 5; i++)
        {
            counts.Add(i);
        }
        return counts;
    }

我想知道是否可以不覆盖并保留 a 中的先前值List<>。在我的示例中,如果我单击该按钮,它将在列表框中填充 1、2、3、4、5,当我再次单击该按钮时,我期望输出 1、2、3、4、5、1、2, 3,4,5 这个值是我对我的期望我List<>怎么可能做到这一点?顺便说一句,那里的列表框仅用于显示目的。谢谢!

4

4 回答 4

3

您只需要删除listBox1.Items.Clear();因此。

除此之外,您可以使用Enumerable.Concat附加项目:

var num1 = numbers();
var num2 = numbers();
foreach(var num in num1.Concat(num2))
{
    //  ...
}

或者可能Enumerable.Range从一开始就使用,假设您总是想添加相同的 5 个项目:

int currentCount = listBox1.Items.Count;
int groupSize = 5;
var allItems = Enumerable.Range(0, currentCount + groupSize)
                         .Select(i => 1 + i % groupSize);
foreach(var item in allItems)
{
    // ...
}
于 2012-11-25T23:11:59.017 回答
1

在类级别声明 numbers() 方法之外的计数。每次调用此方法都会将 1,2,3,4,5 添加到列表中。

private List<int> _counts = new List<int>();

private void button1_Click(object sender, EventArgs e)
{
    listBox1.Items.Clear();
    foreach (var i in numbers())
    {
        listBox1.Items.Add(i);
    }
}

private List<int> numbers()
{
    for (int i = 1; i <= 5; i++)
    {
        _counts.Add(i);
    }
    return counts;
}
于 2012-11-25T23:15:12.227 回答
1

使用List<int> counts = new List<int>();,您可以创建一个新的空列表。每次调用numbers().

如果我正确理解您的问题,您希望numbers()将这五个数字添加到现有列表中,因此每次调用numbers().

为了实现这一点,不要List<int>在每次调用时创建一个新的numbers()作为结果值返回的;而是为该列表创建一个私有字段,并在每次调用时对其进行修改numbers()

private List<int> counts = new List<int>();

private List<int> numbers()
{
    for (int i = 1; i <= 5; i++)
    {
        counts.Add(i);
    }
    return counts;
}

请注意,它numbers()仍然会返回列表,但它不是新列表;每次都是相同的列表实例。

于 2012-11-25T23:15:45.033 回答
1

Clear删除列表中的所有项目。如果您只是想将新列表中的所有项目附加到旧列表中,请使用AddRange

 listBox1.Items.AddRange(numbers());
于 2012-11-25T23:11:34.973 回答