System.Runtime.Serialization.Formatters.Soap.SoapHandler.ParseArrayDimensions C# (CSharp) Метод

ParseArrayDimensions() приватный Метод

private ParseArrayDimensions ( String dimString, int &rank, String &dimSignature, InternalArrayTypeE &arrayTypeEnum ) : int[]
dimString String
rank int
dimSignature String
arrayTypeEnum InternalArrayTypeE
Результат int[]
        private int[] ParseArrayDimensions(String dimString, out int rank, out String dimSignature, out InternalArrayTypeE arrayTypeEnum)
        {
            InternalST.Soap( this, "ProcessArrayDimensions Enter ",dimString);      
            char[] dimArray = dimString.ToCharArray();

            int paramCount = 0;
            int commaCount = 0;
            int rankCount = 0;
            int[] dim = new int[dimArray.Length];


            StringBuilder sb = new StringBuilder(10);
            StringBuilder sigSb = new StringBuilder(10);

            for (int i=0; i<dimArray.Length; i++)
            {
                if (dimArray[i] == '[')
                {
                    paramCount++;
                    sigSb.Append(dimArray[i]);
                }
                else if (dimArray[i] == ']')
                {
                    if (sb.Length > 0)
                    {
                        dim[rankCount++] = Int32.Parse(sb.ToString(), CultureInfo.InvariantCulture);
                        sb.Length = 0;
                    }
                    sigSb.Append(dimArray[i]);                  
                }
                else if (dimArray[i] == ',')
                {
                    commaCount++;
                    if (sb.Length > 0)
                    {
                        dim[rankCount++] = Int32.Parse(sb.ToString(), CultureInfo.InvariantCulture);
                        sb.Length = 0;
                    }
                    sigSb.Append(dimArray[i]);                      
                }
                else if ((dimArray[i] == '-') || (Char.IsDigit(dimArray[i])))
                {
                    sb.Append(dimArray[i]);
                }
                else
                    throw new SerializationException(String.Format(CultureInfo.CurrentCulture, SoapUtil.GetResourceString("Serialization_ArrayDimensions"),dimString));
            }

            rank = rankCount;
            dimSignature = sigSb.ToString();
            int[] dimA = new int[rank];
            for (int i=0; i<rank; i++)
            {
                dimA[i] = dim[i];
            }

            InternalArrayTypeE outEnum = InternalArrayTypeE.Empty;

            if (commaCount > 0)
                outEnum = InternalArrayTypeE.Rectangular;
            else
                outEnum = InternalArrayTypeE.Single;

            arrayTypeEnum = outEnum;

            InternalST.Soap( this, "ProcessArrayDimensions Exit rank ",rank," dimSignature ",sigSb.ToString()," arrayTypeEnum ",((Enum)outEnum).ToString());

            return dimA;
        }