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 string
和 contents
不是 IDisposable
(因为字符串不是)。
你应该这样使用它:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
您想清理 StreamReader
,contents
将在方法完成时被 GC 收集,因为它的类型为 string
。
我有以下逻辑:
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 string
和 contents
不是 IDisposable
(因为字符串不是)。
你应该这样使用它:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
您想清理 StreamReader
,contents
将在方法完成时被 GC 收集,因为它的类型为 string
。