Проблема с преждевременным удалением при инкапсуляции итерации строки CsvHelper - PullRequest
0 голосов
/ 06 сентября 2018

Я хотел сделать мою жизнь немного проще, инкапсулируя итерации строк, используя CsvHelper, например:

public IEnumerable<IReaderRow> ReadRows(string filename, Encoding encoding, bool hasHeaders)
{
    using (StreamReader sr = new StreamReader(filename, encoding, false, 65536))
    {
        CsvHelper.Configuration.Configuration konfig =
            new CsvHelper.Configuration.Configuration() {/*My settings*/};
        using (CsvReader csv = new CsvReader(sr, konfig))
        {
            if (hasHeaders)
            {
                csv.Read();
                csv.ReadHeader();
            }
            while (csv.Read())
                yield return csv;
        }
    }
}

Попытка использовать это в модульном тесте следующим образом:

IReaderRow testRow = encapsulatedReader.ReadRows(/*...*/).First();

После этой строки я не могу использовать testRow, потому что это просто ссылка на объект CsvReader из итератора, и этот объект был удален в конце итерации из-за using. Помимо прочего, контекст и конфигурация теряются.

Я понимаю, что это в основном установка, которая упрощается инкапсуляцией, но если я делаю , хочу использовать свой собственный итератор для чтения строк и все еще использовать возможности интерфейса IReaderRow для каждая строка (т.е. возвращать этот интерфейс для каждой строки), как мне это реализовать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...