2015-03-17 4 views
2

Я пишу класс, который экспортирует данные в CSV-файл, и его конструктор принимает TextWriter. Причина, по которой я использую TextWriter, а не StreamWriter, заключается в том, чтобы облегчить тестирование: я могу использовать тот же самый конструктор для записи в StreamWriter (который записывает файлы, предполагаемый прецедент) и писать в StringWriter (что полезно для тестирования).Есть ли способ проверить, закрыт ли TextWriter?

В моем конструкторе я хотел бы выполнить некоторую проверку на переданной в TextWriter. Проблема в том, что я не могу понять, как проверить, открыт или закрыт TextWriter. Это возможно для StreamWriter, если свойство BaseStream равно null. Однако TextWriter не обладает этим свойством. Есть ли другой способ проверить, открыт ли TextWriter или нет?

+1

Я не думаю, что вы можете сделать это без взлома в частных полях, но я также не думаю, что это действительно имеет значение. Ошибка при доступе не очень плохая ситуация для вашего случая, потому что в общем случае ваш класс будет использоваться для записи сразу после инициализации. – tia

+0

Класс, который я пишу, не будет писать сразу после инициализации. Класс имеет поток, который будет работать в фоновом режиме и продолжать писать в течение определенного периода времени, пока ему не будет предложено остановиться. – 9a3eedi

ответ

-1

Вы можете попробовать так:

if(writer.BaseStream != null) 
{ 
    writer.WriteLine("Writer is open"); 
} 
else 
{ 
    MessageBox.Show ("Writer is closed"); 
} 

т.е., если BaseStream является NULL, то автор уже удален.

Также рекомендуется использовать блок using, поскольку он позаботится об этом.

+0

Проблема заключается в том, что TextWriter не имеет свойства BaseStream, поэтому я задаю этот вопрос. – 9a3eedi

+1

@ 9a3eedi: - Действительно. Поэтому я предполагаю, что единственный способ - использовать блок 'using', поскольку он будет уничтожать все после его завершения. –

 Смежные вопросы

  • Нет связанных вопросов^_^