public override object Read(ES3Reader reader) { var list = new List <object>(); if (!ReadICollection(reader, list, elementType)) { return(null); } var array = ES3Reflection.ArrayCreateInstance(elementType.type, list.Count); int i = 0; foreach (var item in list) { array.SetValue(item, i); i++; } return(array); /*var instance = new List<object>(); * * if(reader.StartReadCollection()) * return null; * * // Iterate through each character until we reach the end of the array. * while(true) * { * if(!reader.StartReadCollectionItem()) * break; * instance.Add(reader.Read<object>(elementType)); * * if(reader.EndReadCollectionItem()) * break; * } * * reader.EndReadCollection(); * * var array = ES3Reflection.ArrayCreateInstance(elementType.type, instance.Count); * int i = 0; * foreach(var item in instance) * { * array.SetValue(item, i); * i++; * } * * return array;*/ }
public override object Read(ES3Reader reader) { if (reader.StartReadCollection()) { return(null); } // Create a List to store the items as a 1D array, which we can work out the positions of by calculating the lengths of the two dimensions. var items = new List <object>(); int length1 = 0; // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadCollectionItem()) { break; } ReadICollection <object>(reader, items, elementType); length1++; if (reader.EndReadCollectionItem()) { break; } } int length2 = items.Count / length1; var array = ES3Reflection.ArrayCreateInstance(elementType.type, new int[] { length1, length2 }); for (int i = 0; i < length1; i++) { for (int j = 0; j < length2; j++) { array.SetValue(items[(i * length2) + j], i, j); } } return(array); }
public override object Read(ES3Reader reader) { var instance = new List <object>(); if (reader.StartReadCollection()) { return(null); } // Iterate through each character until we reach the end of the array. while (true) { if (!reader.StartReadCollectionItem()) { break; } instance.Add(reader.Read <object>(elementType)); if (reader.EndReadCollectionItem()) { break; } } reader.EndReadCollection(); var array = ES3Reflection.ArrayCreateInstance(elementType.type, instance.Count); int i = 0; foreach (var item in instance) { array.SetValue(item, i); i++; } return(array); }