以下是我的示例代码:
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;
}
我想知道是否有可能不会覆盖并保留List<>
中的先前值。在我的示例中,如果单击按钮,它将在列表框中填充1,2,3,4,5,当我再次单击该按钮时,我预计输出为1,2,3,4,5,1,2, 3,4,5这个值是我期待的List<>
我怎么可能这样做?顺便说一下,列表框仅用于显示目的。谢谢!
答案 0 :(得分: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)
{
// ...
}
答案 1 :(得分:1)
Clear
删除列表中的所有项目。如果您只想将新列表中的所有项目附加到旧列表,请使用AddRange
:
listBox1.Items.AddRange(numbers());
答案 2 :(得分: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;
}
答案 3 :(得分: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()
仍将返回列表,但它不是新列表;它每次都是相同的列表实例。