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

Unity中C# For循环填充数组元素异常问题求助

问题原因及解决方案

核心问题出在引用类型的复用上——如果你在for循环外只创建了一个引用类型的实例,循环里只是修改这个实例的内容,再把它赋值给数组的每个索引,那数组里所有元素都会指向同一个内存地址,最终显示的自然是最后一次修改的内容。

举个你大概率写错的代码示例:

// 错误写法:复用同一个引用类型实例
public class QuoteItem {
    public string text;
}

QuoteItem[] quotes = new QuoteItem[3];
QuoteItem tempItem = new QuoteItem(); // 仅创建一次实例

for (int i = 0; i < quotes.Length; i++) {
    // 只是修改已有实例的内容,而非创建新实例
    tempItem.text = $"名言内容{i}";
    quotes[i] = tempItem; // 所有数组元素都指向同一个tempItem
}

解决方法很简单:把实例创建的逻辑放到循环内部,每次循环都生成新的实例,再赋值给数组:

// 正确写法:循环内创建新实例
QuoteItem[] quotes = new QuoteItem[3];

for (int i = 0; i < quotes.Length; i++) {
    QuoteItem tempItem = new QuoteItem(); // 每次循环新建实例
    tempItem.text = $"名言内容{i}";
    quotes[i] = tempItem;
}

如果你的quotes是string数组(string是特殊的引用类型,具有不可变性),那循环赋值本身不会出现这个问题,这时候要检查:

  • 循环内是不是每次都给数组赋值了同一个字符串变量
  • 是不是读取名言的逻辑有问题,比如每次都取到同一个内容

你可以在循环内加一句Debug.Log(quotes[i].text);,确认赋值阶段每个元素的内容是否正确,快速定位问题环节。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 06:42:12