Анализ fxcop выдает предупреждение CA2202 для следующего тела метода в строке foreach
:
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, вы не должны вызывать Dispose более одного раза для объекта .: Строки: 34
Я провел некоторое исследование и увидел, что nested using
операторы и Dispose
вызовы заставляют анализатор урод и выдавать это предупреждение , но у меня нет ни явного Dispose
вызова, ни using
блок. Я не встречал другого случая, когда это предупреждение появляется для цикла foreach
. Я знаю, как подавить предупреждение, но я просто хотел понять, что может быть причиной этого?