You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何调用List.Clear()会清除类中引用的列表?Unity代码问题求助

问题解决:Unity中List引用导致数据被清空的问题

问题本质

你遇到的问题核心是List是引用类型:所有Question实例的choice字段都指向了同一个全局choices列表对象。不管调用Clear()还是往里面添加新元素,所有关联的Question实例都会同步看到这个列表的变化——这就是为什么不调用Clear()会出现重复数据,调用后之前存储的ques.choice也被清空的原因。

解决方案

有两种简单的修复方式,任选其一即可:

方式1:每次创建新的List(推荐)

去掉全局的choices列表,在AssignData方法内部每次创建新的List,确保每个Question的choice都是独立的对象:

修改后的GameController.cs:

List<Question> question_list = new List<Question>();

void Start()
{
    AssignData("question_1", "aaa", "bbb", "ccc");
    ViewData();

    AssignData("question_2", "111", "222", "333");
    ViewData();
}

public void AssignData(string question, string choice1, string choice2, string choice3)
{
    // 每次创建新的List存储选项
    List<string> choices = new List<string>();
    choices.Add(choice1);
    choices.Add(choice2);
    choices.Add(choice3);

    var ques = new Question();
    ques.question = question;
    ques.choice = choices;
    ques.option = 2;
    question_list.Add(ques);
}

public void ViewData()
{
    for(int i=0; i < question_list.Count; i++)
    {
        Debug.Log(question_list[i].question);
        foreach(var item in question_list[i].choice)
        {
            Debug.Log(item);
        }
    }
}

方式2:为每个Question创建List副本

如果一定要保留全局的choices列表,在赋值给ques.choice时,创建一个列表的副本,这样修改原choices不会影响已存储的Question实例:

修改后的GameController.cs关键部分:

List<Question> question_list = new List<Question>();
List<string> choices = new List<string>();

void Start()
{
    AssignData("question_1", "aaa", "bbb", "ccc");
    ViewData();

    choices.Clear();
    
    AssignData("question_2", "111", "222", "333");
    ViewData();
}

public void AssignData(string question, string choice1, string choice2, string choice3)
{
    choices.Add(choice1);
    choices.Add(choice2);
    choices.Add(choice3);

    var ques = new Question();
    ques.question = question;
    // 创建副本,而非直接引用原列表
    ques.choice = new List<string>(choices);
    ques.option = 2;
    question_list.Add(ques);
}

效果验证

修改后运行代码,ViewData会输出你期望的结果:

question_1
aaa
bbb
ccc
question_2
111
222
333

内容的提问来源于stack exchange,提问作者LearnProgramming

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:55:19