private void DelimiterCharEvent(char c)
        {
            switch (state)
            {
            case DelimitedFieldParserState.InDelimiter:
                if (!SqueezeDelimiters)
                {
                    AddField();
                }
                break;

            case DelimitedFieldParserState.InTextData:
                AddField();
                NewField();
                state = DelimitedFieldParserState.InDelimiter;
                break;

            case DelimitedFieldParserState.InQuotedText:
                AppendChar(c);
                break;

            case DelimitedFieldParserState.InClosingQuotes:
                AddField();
                NewField();
                state = DelimitedFieldParserState.InDelimiter;
                break;

            default:
                throw new InvalidOperationException();
            }
        }
        private void QuoteCharEvent(char c)
        {
            if (!HasFieldsEnclosedInQuotes)
            {
                DefaultCharEvent(c);
                return;
            }

            switch (state)
            {
            case DelimitedFieldParserState.InDelimiter:
                state = DelimitedFieldParserState.InQuotedText;
                break;

            case DelimitedFieldParserState.InTextData:
                throw new MalformedLineException("Unexpected quote.", LineNumber);

            case DelimitedFieldParserState.InQuotedText:
                state = DelimitedFieldParserState.InClosingQuotes;
                break;

            case DelimitedFieldParserState.InClosingQuotes:
                AddField();
                NewField();
                state = DelimitedFieldParserState.InQuotedText;
                break;

            default:
                throw new InvalidOperationException();
            }
        }
        private void DefaultCharEvent(char c)
        {
            switch (state)
            {
            case DelimitedFieldParserState.InDelimiter:
                AppendChar(c);
                state = DelimitedFieldParserState.InTextData;
                break;

            case DelimitedFieldParserState.InTextData:
                AppendChar(c);
                break;

            case DelimitedFieldParserState.InQuotedText:
                AppendChar(c);
                break;

            case DelimitedFieldParserState.InClosingQuotes:
                throw new MalformedLineException("Expected delimiter not found.", LineNumber);

            default:
                throw new InvalidOperationException();
            }
        }
 private void Initialize()
 {
     NewField();
     fields.Clear();
     state = DelimitedFieldParserState.InDelimiter;
 }