【问题标题】:Can't assign array elements [duplicate]无法分配数组元素[重复]
【发布时间】:2020-05-19 12:15:46
【问题描述】:

在我的脚本的开头我有这行:

Color[] oldColor;

后来我想用元素填充它,所以在我写的一个函数中:

for (int i = 0; i < targets.Length; i++)
        oldColor[i] = targets[i].color;

但是,第一行带有绿色下划线,它表示我不能分配一个值,除非它的默认值(即为空)。 当我在 Unity 中运行它时,for 循环下面的行(它应该将值从一个数组复制到另一个数组)给了我 NullReferenceException。

“目标”定义为

SpriteRenderer[] targets;

它的所有元素都是通过 Inspector 分配的。

我不明白会发生什么。为什么不分配变量?

【问题讨论】:

  • 如果你像这样初始化 oldColor 会怎样 - Color[] oldColor = new Color[targets.Length]; 当我把你的代码放在 LINQPad 中时我得到的错误是 Use of unassigned local variable 'oldColor' 你需要先初始化它才能使用它。

标签: c# arrays unity3d


【解决方案1】:

您必须先初始化一个数组并设置它的大小,然后再添加项目:

Color[] oldColor = new Color[10];   // just an example - use whatever size is appropriate

然后你可以设置它的元素。

更灵活的解决方案(如果您事先不知道大小)是使用 List 代替:

List<Color> oldColor = new List<Color>();

for(...)
{
    oldColor.Add(targets[i].color);
}

【讨论】:

    【解决方案2】:

    使用 linq 可以直接将 target.color 的值复制到 oldColor,没有数组大小问题

    using System.Linq;
    :
    :
    Color[] oldColor = targets.Select(s => s.color).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-29
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      • 2021-06-30
      相关资源
      最近更新 更多