private static bool ParseArray(Type eType, string sArray, out object val)
{
val = null;
IZXPConverter etConv;
ZXParser.GetConverter(eType, out etConv);
var nl = Delimiter.Delimit(sArray, DelimitType.Angled | DelimitType.Curly);
// Create Parameters
object element;
var elements = new List<object>();
for(int ai = 0; ai < nl.Count; ) {
if(nl[ai].Type == DelimitType.Angled) {
if(ai >= nl.Count - 1 || nl[ai + 1].Type != DelimitType.Curly) {
ai++;
continue;
}
// Get The Argument Type
string atValue = sArray.Substring(nl[ai].Start, nl[ai].Length);
if(string.IsNullOrWhiteSpace(atValue))
break;
Type aType = GetTypeFromString(atValue);
if(aType == null) {
ai += 2;
continue;
}
// Get The Argument
string sValue = sArray.Substring(nl[ai + 1].Start, nl[ai + 1].Length);
IZXPConverter conv;
ZXParser.GetConverter(aType, out conv);
if(ReadValue(sValue, conv, aType, out element)) {
elements.Add(element);
}
ai += 2;
}
else {
// Simple Parse
string sValue = sArray.Substring(nl[ai].Start, nl[ai].Length);
if(ReadValue(sValue, etConv, eType, out element)) {
elements.Add(element);
}
ai++;
}
}
if(elements.Count < 1) return true;
var valArr = Array.CreateInstance(eType, elements.Count);
for(int i = 0; i < elements.Count; i++) {
valArr.SetValue(elements[i], i);
}
val = valArr;
return true;
}