让我的数组[1]从另一个数组中获取值

时间:2014-01-09 07:56:39

标签: c# arrays unity3d

我正在尝试让我的数组从另一个相同类型的数组中获取值。 这是我的代码

public class Skill {
    //....variables
}    

public Skill[]    allSkills; 

void Start () 
{
    allSkills = new Skill[5];    // this is a class of array
}

void GetArray ()
{
   string blah = PlayerPrefs.GetString("CatSkills");
   allSkills = JsonConvert.DeserializeObject<Skill[]>(blah);

    // the above can also be translated as
   Skill[] skill;
   allSkills = skill;
}

虽然上述方法有效,但它仅应用allSkills [0]上的值。在我删除了我的PlayerPrefs之后,它将我的allSkill的数组大小变为null。

如何使其保持数组大小并将值应用于'allSkills [1]'?

2 个答案:

答案 0 :(得分:0)

您正在将新数组(JsonConvert.DeserializeObject<Skill[]>(blah))分配给allArray,因此旧实例的引用将被新实例替换!如果你想用新数组的值填充旧数组,只需使用CopyTo方法:

JsonConvert.DeserializeObject<Skill[]>(blah).CopyTo(allSkills, 0);

请注意,这样您就无法将所有值应用于allSkills [1],因为它是一维数组。为此,如果需要数组数组,可以使用二维数组!

编辑:如果您想使用数组数组,您有两个选项,使用jagged array或简单的two dimensional array,使用锯齿数组,您必须指定数量行但列数可以变化。但是,如果您知道列数,那么请选择一个简单的two dimensional array,但我建议您使用List代替Array。这是jagged array代码示例:

public Skill[][] = new Skill[5][]; // Instantiate a jagged array with 5 rows

...

allSkills[1] = JsonConvert.DeserializeObject<Skill[]>(blah);

答案 1 :(得分:0)

终于找到了答案。这适用于任何想要了解的人。

public class Skill {
    //....variables
}    

public List<Skill> allSkills    = new List<Skill>();
public Skill[] skillArray;

void GetArray ()
{
   string blah = PlayerPrefs.GetString("CatSkills");
   JsonConvert.DeserializeObject<List<Skill>>(blah).CopyTo(skillArray, 0);
}