[英]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.