I have the following logic:
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;
}
In the using
statement I have an error in the question. It happened probably because I use .ReadToEnd()
method.
Without the using
statement I would need to use try/catch/finally
for a clean up (to fix veracode
resource clean up issue)
How can I fix that, so I don't need to use try\catch\finally
and use only the using
statement?
So, using
should be used with object which implements IDisposable
interface. You calling ReadToEnd
method which returns string
and contents
is not a IDisposable
(because string is not).
You should use it like this:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
You want to clean up StreamReader
, contents
will be collected by GC when method will finished because it has type string
.