System.ZXParser.ParseArray C# (CSharp) Method

ParseArray() private static method

private static ParseArray ( Type eType, string sArray, object &val ) : bool
eType Type
sArray string
val object
return bool
        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;
        }