代码之家  ›  专栏  ›  技术社区  ›  gene

using语句中使用的类型应隐式转换为IDeisposable

  •  0
  • gene  · 技术社区  · 3 年前

    我有以下逻辑:

    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() 方法

    没有 使用 我需要使用的语句 try/catch/finally 进行清理 veracode 资源清理问题)

    我该怎么解决,这样我就不需要使用 try\catch\finally 并且仅使用 使用 陈述

    1 回复  |  直到 2 年前
        1
  •  1
  •   Sergey Nazarov    3 年前

    所以 using 应与实现的对象一起使用 IDisposable 界面你在打电话 ReadToEnd 返回的方法 string contents 不是 IDisposable (因为字符串不是)。 您应该这样使用它:

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

    你想清理 StreamReader , 目录 将在方法完成时由GC收集,因为它具有类型 一串 .