using 语句中使用的类型应该可以隐式转换为 IDisposable

Type used in a using statement should be implicitly convertible to IDisposable

我有以下逻辑:

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

我该如何解决这个问题,这样我就不需要使用 try\catch\finally 而只使用 using 语句?

因此,using 应该与实现 IDisposable interface. You calling ReadToEnd 方法的对象一起使用,而 returns stringcontents 不是 IDisposable (因为字符串不是)。 你应该这样使用它:

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

您想清理 StreamReadercontents 将在方法完成时被 GC 收集,因为它的类型为 string