using-statement - 在 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
应该与实现IDisposable
接口的对象一起使用。您调用ReadToEnd
返回string
且contents
不是 a 的方法IDisposable
(因为字符串不是)。你应该像这样使用它:
using (var streamReader = new StreamReader(file.InputStream))
{
var contents = streamReader.ReadToEnd();
// Some actions
}
你想清理StreamReader
,contents
当方法完成时会被 GC 收集,因为它有类型string
。
推荐阅读
- firefox - Firefox - 开发者工具显示 XHR 参数
- javascript - 选择 HTML 元素 Jquery 之后的下一个 span 元素
- tensorflow - 如何在特定时期后冻结特定层的训练
- business-objects - Web Intelligence:折线图法
- javascript - 包装 Voronoi 图
- elixir - Phoenix:设置路由器全局上下文路径
- node.js - (dotenv) 与 NodeJS:缺少配置值 LDAP_DN
- python - 检查回文时处理尾随换行符
- scala - 加入带有大型 Spark Scala 的 smail Dataframe,通过特征选择删除重复项
- python - 使用 glob.glob & max (os.path.getctime) 获取最新的文件名等