/// <summary> /// 读取当前代码块。 /// </summary> /// <param name="reader">字符串读取实例。</param> public override void Init(SourceReader reader) { reader.EscapeWhiteSpace(); var declarations = new List <string>(); string value = null; while (reader.CanRead) { switch (reader.Current) { case ')': reader.Offset(); //{}或者=>; Rules = reader.ReadRules(); if (reader.Current == ';') //接口方法,没有主体 { reader.Offset(); //移除; return; } // 代码块 if (reader.IsNext("=>")) { reader.Offset(2); Lambda = reader.ReadQuoteUntil(';').Trim(); reader.Offset(); //移除; return; } else if (reader.Current == ':') { //构造函数 reader.Offset(); reader.EscapeWhiteSpace(); BaseConstructor = reader.ReadQuoteUntil('{').Trim(); } break; case '{': //结束 Code = reader.ReadQuoteBlock('{', '}'); return; case ',': reader.Offset(); Parameters.Add(new ParameterElement(declarations, value, this)); declarations = new List <string>(); value = null; break; case '=': reader.Offset(); value = reader.ReadQuoteUntil(')', ','); break; default: declarations.Add(reader.ReadParameterDeclaration(')')); break; } reader.EscapeWhiteSpace(); } }
/// <summary> /// 读取泛型约束。 /// </summary> /// <param name="reader">当前读取器。</param> /// <returns>返回泛型约束列表。</returns> public static List <string> ReadRules(this SourceReader reader) { reader.EscapeWhiteSpace(); var rules = new List <string>(); while (reader.IsNext("where ")) { var rule = reader.ReadUntil(':') + ":"; reader.Offset(); rule += reader.ReadQuoteUntil("where ", '{', '=').Trim(); while (reader.Current == '=' && !reader.IsNext("=>"))//lambda表达式 { rule += reader.ReadQuoteUntil("where ", '{', '=').Trim(); } rules.Add(rule); } return(rules); }
/// <summary> /// 代码解析。 /// </summary> /// <param name="reader">源码读取器。</param> protected override void Initialized(SourceReader reader) { var name = reader.ReadUntil('=', ','); if (reader.Current == '=') { reader.Offset();//移除'=' var value = reader.ReadQuoteUntil(',', '}').Trim(); if (reader.Current == '}') { AddElement(new EnumFieldElement(name, value, this)); return; } } reader.Offset();//移除',' AddElement(new EnumFieldElement(name, null, this)); }
/// <summary> /// 读取当前代码块。 /// </summary> /// <param name="reader">字符串读取实例。</param> public override void Init(SourceReader reader) { reader.EscapeWhiteSpace(); var declarations = new List <string>(); string value = null; while (reader.CanRead) { switch (reader.Current) { case ']': reader.Offset(); //{}或者=>; Rule = reader.ReadUntil('{', '=').Trim(); reader.Offset(); //移除{或者= base.Init(reader); return; //结束 case ',': reader.Offset(); Parameters.Add(new ParameterElement(declarations, value, this)); declarations = new List <string>(); value = null; break; case '=': reader.Offset(); value = reader.ReadQuoteUntil(']', ','); break; default: declarations.Add(reader.ReadParameterDeclaration(']')); break; } reader.EscapeWhiteSpace(); } }
/// <summary> /// 读取当前代码块。 /// </summary> /// <param name="reader">字符串读取实例。</param> public override void Init(SourceReader reader) { reader.EscapeWhiteSpace(); Value = reader.ReadQuoteUntil(';'); reader.Offset(); }
/// <summary> /// 读取当前代码块。 /// </summary> /// <param name="reader">字符串读取实例。</param> public override void Init(SourceReader reader) { //Lambda表达式 reader.EscapeWhiteSpace(); if (reader.IsNext('>')) { reader.Offset(); //移除> Lambda = reader.ReadQuoteUntil(';').Trim(); reader.Offset(); //移除; return; } // 获取 if (reader.IsNext("get")) { reader.Offset(3); reader.EscapeWhiteSpace(); if (reader.IsNext(';')) { GetField = "get;"; reader.Offset(1); } else if (reader.IsNext("=>")) { GetField = $"get{reader.ReadQuoteUntil(';').Trim()};"; reader.Offset(1); } else if (reader.IsNext('{')) { GetField = $"get{reader.ReadQuoteBlock('{', '}').Trim()};"; } } // 设置 reader.EscapeWhiteSpace(); if (reader.IsNext("set")) { reader.Offset(3); reader.EscapeWhiteSpace(); if (reader.IsNext(';')) { SetField = "set;"; reader.Offset(1); } else if (reader.IsNext("=>")) { SetField = $"set{reader.ReadQuoteUntil(';').Trim()};"; reader.Offset(1); } else if (reader.IsNext('{')) { SetField = $"set{reader.ReadQuoteBlock('{', '}').Trim()};"; } } //移除} reader.EscapeWhiteSpace(); reader.Offset(); //默认值 reader.EscapeWhiteSpace(); if (reader.IsNext('=')) { reader.Offset(); //移除= Value = reader.ReadQuoteUntil(';').Trim(); reader.Offset(); //移除; } }