簡體   English   中英

CA2202 ForEach 循環警告

[英]CA2202 Warning for ForEach loop

fxcop 分析在foreach行上為以下方法主體提供CA2202警告

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 Object 'steps.GetEnumerator()' 可以在方法 'LoggingService.LogAnalysis(IEnumerable, bool)' 中多次處理。 為避免生成 System.ObjectDisposedException,您不應在 object 上多次調用 Dispose。:行:34

我做了一些研究,發現嵌套using語句和Dispose調用會導致分析器發瘋發出此警告,但我既沒有明確Dispose調用,也沒有using塊。 我還沒有遇到過針對foreach循環彈出此警告的另一種情況。 我知道如何抑制警告,但我只是想了解這可能是什么原因

根據 canton7 的評論,我意識到當您使用菜單“分析”>“運行代碼分析”強制執行代碼分析時,即使您安裝了新的 Roslyn Nuget Package,它也會強制使用舊的二進制 fxcop 新的分析器在構建時自動使用,當我使用新的分析器時,問題中提到的警告消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM