C# 每次迭代后,全局列表都会获取新值,并且不会';我拿不住前一个 公开课审判 { 公共字符串Tname; 公共列表项=新列表(); 公共列表持续时间=新列表(); } List mtrials=新列表(); 列表临时项=新列表(); 列表时间=新列表(); 私有无效按钮8_单击(对象发送者,事件参数e) { 补充(新的试验{ Tname=textBox9.Text, 项目=临时项目, 持续时间=临时持续时间}); 温度持续时间。清除(); temp_Item.Clear(); }
C# 每次迭代后,全局列表都会获取新值,并且不会';我拿不住前一个 公开课审判 { 公共字符串Tname; 公共列表项=新列表(); 公共列表持续时间=新列表(); } List mtrials=新列表(); 列表临时项=新列表(); 列表时间=新列表(); 私有无效按钮8_单击(对象发送者,事件参数e) { 补充(新的试验{ Tname=textBox9.Text, 项目=临时项目, 持续时间=临时持续时间}); 温度持续时间。清除(); temp_Item.Clear(); },c#,list,C#,List,mtrials、temp\u项目和temp\u持续时间是全局列表。我的问题是,在每次迭代之后,mtrials值也会改变。我不知道为什么会发生这种情况,因为一旦我将值赋予mlist,我就会清除它们,以便保存新的值。temp\u项和temp\u持续时间用作保存大量数据的列表。item=temp\u项;temp_item.Clear()您正在通过相同的引用清除相同的列表,因此项目和持续时间始终为空。 不能跳过temp_item.Clear() 而不是清除“临时持续时间”和“临时项目” 使用 字符串s1
mtrials
、temp\u项目
和temp\u持续时间
是全局列表。我的问题是,在每次迭代之后,mtrials
值也会改变。我不知道为什么会发生这种情况,因为一旦我将值赋予mlist
,我就会清除它们,以便保存新的值。temp\u项
和temp\u持续时间
用作保存大量数据的列表。item=temp\u项;temp_item.Clear()代码>您正在通过相同的引用清除相同的列表,因此项目
和持续时间
始终为空。
不能跳过temp_item.Clear()代码>
而不是清除“临时持续时间”和“临时项目”
使用
字符串s1=临时持续时间[temp_Duration.Count-1];
字符串s2=temp_Item[temp_Item.Count-1] 当您在列表上运行Clear()
时,您正在修改刚才给mtrials
的相同引用
private void button8_Click(object sender, EventArgs e)
{
mtrials.Add(new trials {
Tname = textBox9.Text,
Item = temp_Item,
Duration = temp_Duration });
}
mtrials.Add(新试验{
Tname=textBox9.Text,
Item=temp\u Item,//private void btnIncarcaLista\u单击(对象发送者,事件参数e)
{
mtrials.Add(新试验)
{
Tname=textBox9.Text,
项目=新列表(临时项目),
持续时间=新列表(临时持续时间)
});
温度持续时间。清除();
temp_Item.Clear();
}
Item=temp_Item在Item字段中创建对temp_Item的引用,当您清除()temp_Item时,Item字段也会被清除。
如果您根据临时项的信息创建一个新列表,比如Item=newlist(temp\u Item),
那么即使您清除了临时项,该信息也会被保留。您拥有的结构真的很复杂。您不能将列表添加到公共静态类中吗?“每次迭代后”您在哪里迭代?
private void button8_Click(object sender, EventArgs e)
{
mtrials.Add(new trials {
Tname = textBox9.Text,
Item = temp_Item,
Duration = temp_Duration });
}
mtrials.Add(new trials {
Tname = textBox9.Text,
Item = temp_Item, //<--- This is pointing to the same list
Duration = temp_Duration });
temp_Item.Clear(); //<--- As this one. You need to create a new list instead.
temp_Duration = new List<string>();
temp_Item = new List<string>()
private void btnIncarcaLista_Click(object sender, EventArgs e)
{
mtrials.Add(new trials
{
Tname = textBox9.Text,
Item = new List<string>(temp_Item),
Duration = new List<string>(temp_Duration)
});
temp_Duration.Clear();
temp_Item.Clear();
}