- Home /
Problems adding to a Builtin Array in C#
I'm managing to grab the data I need out of an XML file, and since I'm working in C# I'm having to set the length of the array by reinitialising it. The problem seems to be that the array isn't done initialising by the time I try to add some data to it (I'm getting a NullReferenceException).
I'm pretty sure of this just because if I try to change any part of the array in Update I'll get more NullReferenceExceptions and then it will eventually work. Any suggestions? Here's what I'm using:
using UnityEngine;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Xml;
public class MyDataTesting : MonoBehaviour
{
public MyClass[] myClasses;
private XmlDocument xmlDoc;
private string url;
private WWW www;
private string xml;
IEnumerator Start()
{
url = "myurl";
www = new WWW(url);
yield return www;
xml = www.text;
LoadDatabase();
}
void LoadDatabase()
{
xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml);
XmlNode root = xmlDoc.FirstChild;
if(root.HasChildNodes)
{
myClasses = new MyClass[root.ChildNodes.Count];
for(int i=0; i<root.ChildNodes.Count; i++)
{
myClasses[i].name = root.ChildNodes[i].Attributes["name"].Value;
}
}
}
}
[Serializable]
public class MyClass
{
public string name;
public int price;
}
Answer by Eric5h5 · Mar 02, 2012 at 02:57 PM
Arrays are finished initializing the instant you initialize them. It's an atomic operation and can't occur "over time" or anything (otherwise no code would ever work). Anyway there's no reason why you have to resize a builtin array, just use List if you need to add to arrays. The reason for the null reference exception is that after you initialize the myClasses array, all the entries are null and haven't been set to anything.
Haha, "atomic operation". It's just really weird that if I spam myClasses[0].name = "TestName" then it will update the entry to "TestName" after 4 or 5 null reference exceptions occurring first.
Anyway, I'll give List a try ins$$anonymous$$d.
Update: List works perfectly. Thanks @Eric5h5!