首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CA2202对ForEach循环的警告

CA2202对ForEach循环的警告
EN

Stack Overflow用户
提问于 2019-10-08 11:48:32
回答 1查看 157关注 0票数 4

fxcop分析给出了CA2202foreach行上的以下方法体的警告:

代码语言:javascript
复制
public void LogAnalysis(IEnumerable<string> steps, bool append = false)
{
    if (steps != null)
    {
        StringBuilder sb = new StringBuilder();
        try
        {
            foreach (string step in steps) // this is line 34
            {
                sb.AppendLine(step);
            }
            if (append)
            {
                sb.Insert(0, string.Format(
                     CultureInfo.InvariantCulture, 
                    "__________Logging started at {0}__________\n",
                     DateTime.Now.ToString(CultureInfo.InvariantCulture)));

                File.AppendAllText(AnalysisLogFile, sb.ToString());
            }
            else
            {
                File.WriteAllText(AnalysisLogFile, sb.ToString());
            }
        }
        catch (Exception e) when (e is IOException || e is UnauthorizedAccessException)
        {
            LogError(e.Message);
        }
        sb.Clear();
    }
}

警告CA2202对象'steps.GetEnumerator()‘可以在方法'LoggingService.LogAnalysis(IEnumerable,bool)’中多次释放。为了避免生成System.ObjectDisposedException,您不应该在对象上调用Dispose超过一次。

我已经做了一些研究,并且看到嵌套的using语句和Dispose调用导致分析器异常并发出警告,但是我没有显式的Dispose调用,也没有using块。我还没有遇到为foreach循环发出此警告的另一种情况。我知道如何压制这一警告,但我只想了解造成这种情况的原因是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-08 12:57:31

基于canton7的注释,我意识到当您使用菜单Analyze>Run代码分析强制进行代码分析时,即使您安装了新的Roslyn包,也会强制使用旧的二进制fxcop 。新的分析器在构建时会自动使用,当我使用新的分析器时,问题中提到的警告已经消失了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58285762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档