首页 > 解决方案 > 在 using 语句中使用的类型应该可以隐式转换为 IDeisposable

问题描述

我有以下逻辑:

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资源清理问题)

我该如何解决这个问题,所以我不需要try\catch\finnaly只使用和使用using语句?

标签: using-statementveracode

解决方案


因此,using应该与实现IDisposable接口的对象一起使用。您调用ReadToEnd返回stringcontents不是 a 的方法IDisposable(因为字符串不是)。你应该像这样使用它:

using (var streamReader = new StreamReader(file.InputStream)) 
{
    var contents = streamReader.ReadToEnd();
    // Some actions
}

你想清理StreamReadercontents当方法完成时会被 GC 收集,因为它有类型string


推荐阅读