private Section ParseSection() { _tokenizer.NextToken(); CheckOrThrow(IniToken.SectionName); var sectionName = _tokenizer.GetValue(); var currentSection = new Section(sectionName); _tokenizer.NextToken(); CheckOrThrow(IniToken.SectionClose); _tokenizer.NextToken(); while (_tokenizer.CurrentToken != IniToken.SectionOpen && _tokenizer.CurrentToken != IniToken.End) { CheckOrThrow(IniToken.Variable); var currentField = _tokenizer.GetValue(); _tokenizer.NextToken(); CheckOrThrow(IniToken.Equals); _tokenizer.NextToken(); CheckOrThrow(IniToken.Value); var value = _tokenizer.GetValue(); var valueType = ValidateValue(value); switch (valueType) { case ValueType.Integer: { var result = int.Parse(value); currentSection.AddInt(currentField, result); break; } case ValueType.Float: { var result = float.Parse(value); currentSection.AddFloat(currentField, result); break; } case ValueType.String: { currentSection.AddString(currentField, value); break; } } _tokenizer.NextToken(); SkipComments(); } return(currentSection); }