Я получаю предупреждение ReSharper "Возможно множественное перечисление IEnumerable" со следующим кодом:
public void Mymethod(IEnumerable<int> entities)
{
var enumerator = entities.GetEnumerator();
var entityType = entities.GetType();
}
Как и во многих описанных темах stackoverflow (а также на http://confluence.jetbrains.net/display/ReSharper/Possible+multiple+enumeration+of+IEnumerable) ReSharper распознает, что запрос выполняется дважды.
Мой вопрос в том, почему оператор "GetType()" распознается как запрос.
Любое предложение?
заранее спасибо.
Ответ 2 · Fredrik Mörk
Чтобы GetTypes был вызван, entities нужно будет оценить с точки зрения ReSharper (он не знает, потребует ли GetTypes вычисление перечисления, поэтому он говорит "возможно множественное перечисление "). Поскольку ReSharper видит, что в методе есть несколько мест, где у вас есть один и тот же сценарий, он выдает это предупреждение.
Это может быть проблемой, а может и не быть, в зависимости от того, что представляет собой entities и какую операцию вы выполняете над ним. Если он представляет массив в памяти или вы выполняете операцию, которая не выполняет итерацию по списку, беспокоиться не о чем. Если вы выполняете итерацию по нему, и он представляет собой запрос, который будет отправлен в базу данных, вероятно, будет хорошо перечислить его явно (вызвав ToList или ToArray) и вместо этого воздействовать на результат.