public float this[int level] { get { if (IsVariable) { return(0); //We can't index a variable. } string[] levels = KV.GetString().Split(' '); if (level >= levels.Length) { return(0); //We don't have enough levels. } return(float.Parse(levels[level])); } set { if (IsVariable) { return; //Can't set a variable } string[] levels = KV.GetString().Split(' '); if (level >= levels.Length) //We don't have enough levels, expand to that point { List <string> newLevels = new List <string>(); newLevels.AddRange(levels); //Fill the array with the last value for (int i = levels.Length; i < level - 1; i++) { newLevels.Add(levels[levels.Length - 1]); } newLevels.Add(value.ToString()); levels = newLevels.ToArray(); } else { levels[level] = value.ToString(); } KV.Set(String.Join(" ", levels)); } }