Exemple #1
0
        /// <summary>
        /// 读取成员声明。
        /// </summary>
        /// <param name="reader">源代码读取器。</param>
        /// <param name="ends">结束符列表。</param>
        /// <returns>返回当前声明字符串。</returns>
        public static string ReadDeclaration(this SourceReader reader, params char[] ends)
        {
            ends = ends.Concat(new[] { '<', ' ', '[' }).Distinct().ToArray();
            var builder = new StringBuilder();

            reader.EscapeWhiteSpace();
            builder.Append(reader.ReadUntil(ends));
            switch (reader.Current)
            {
            case ' ':
                reader.EscapeWhiteSpace();
                if (reader.IsNext('<'))     //泛型类型List <string>
                {
                    builder.Append(reader.ReadQuoteBlock('<', '>'));
                }
                else if (reader.IsNext('['))    //数组
                {
                    builder.Append(reader.ReadChars(']', new[] { '[', ',', ' ' }));
                }
                break;

            case '<':    //泛型类型List<string>
                builder.Append(reader.ReadQuoteBlock('<', '>'));
                break;

            case '[':    //数组
                builder.Append(reader.ReadChars(']', new[] { '[', ',', ' ' }));
                break;
            }

            reader.EscapeWhiteSpace();
            return(builder.ToString().Trim());
        }