我正在尝试让我的数组从另一个相同类型的数组中获取值。 这是我的代码
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]'?
答案 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);
}