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();
        }