Я использую новую версию Resharper 6. В нескольких местах моего кода она подчеркнула некоторый текст и предупредила меня, что может быть возможно множественное перечисление IEnumerable.
Я понимаю, что это значит, и, при необходимости, принял совет, но в некоторых случаях я не уверен, что это действительно большая проблема.
Как в следующем коде:
var properties = Context.ObjectStateManager.GetObjectStateEntry(this).GetModifiedProperties();
if (properties.Contains("Property1") || properties.Contains("Property2") || properties.Contains("Property3")) {
...
}
Он подчеркивает каждое упоминание properties
во второй строке, предупреждая, что я перечисляю этот IEnumerable несколько раз.
Если я добавлю .ToList()
в конец строки 1 (поворот properties
от IEnumerable<string>
до List<string>
), предупреждения исчезнут.
Но, конечно, если я преобразую его в список, то он перечислит весь IEnumerable для создания списка в первую очередь, а затем перечислит список, необходимый для поиска свойств (т.е. 1 полное перечисление и 3 частичных перечисления). Если в моем исходном коде он делает только 3 частичных перечисления.
Неужели я ошибаюсь? Какой лучший метод здесь?