我有以下逻辑:
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/finally
进行清理(以修复veracode
资源清理问题)
我怎么能解决这个问题,所以我不需要使用trycatchfinally
,只使用using
语句?
因此,using
应该与实现IDisposable
接口的对象一起使用。您调用返回string
和contents
的ReadToEnd
方法不是IDisposable
(因为字符串不是)。你应该这样使用它:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
您想要清理StreamReader
,contents
将在方法结束时被GC收集,因为它的类型是string
。