#using-statement #veracode
Вопрос:
У меня есть следующая логика:
try
{
using (var contents = new StreamReader(file.InputStream).ReadToEnd())
{
var rows = contents.Split(new[] { Environment.NewLine }, StringSplitOptions.None);
rows.ForEach(r => mids.Add(r.Split(',')[0]));
}
}
catch(IOException e)
{}
finally
{
contents = null;
}
В using
заявлении у меня есть ошибка в вопросе. Это произошло, вероятно, потому, что я использую .ReadToEnd()
метод.
Без using
заявления мне нужно было бы использовать try/catch/finaly
для очистки (чтобы устранить veracode
проблему с очисткой ресурсов)
Как я могу это исправить, чтобы мне не нужно было использовать trycatchfinnaly
и использовать только using
инструкцию?
Ответ №1:
Итак, using
следует использовать с объектом, который реализует IDisposable
интерфейс. Вы вызываете ReadToEnd
метод, который возвращает string
и contents
не является IDisposable
(потому что строка не является). Вы должны использовать его вот так:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
Вы хотите очистить StreamReader
, contents
будет собран GC, когда метод будет завершен, потому что у него есть тип string
.