Возможное множественное перечисление предупреждения IEnumerable с помощью .GetType () - PullRequest
4 голосов
/ 17 января 2012

Я получаю предупреждение 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 ]

3 голосов
/ 17 января 2012

Просто Решарпер недостаточно умён. GetType не является виртуальным методом, он не может повлиять на IEnumerable.

0 голосов
/ 17 января 2012

Чтобы вызвать GetTypes, нужно будет entities оценить с точки зрения ReSharper (он не знает, потребует ли GetTypes перечисление для оценки, поэтому он говорит " возможно многократное перечисление "). Поскольку ReSharper видит, что в методе есть несколько мест, где у вас один и тот же сценарий, он выдает это предупреждение.

Это может быть, а может и не быть проблемой, в зависимости от того, что представляет entities и какую операцию вы над ней выполняете. Если он представляет массив в памяти, или вы выполняете операцию, которая не выполняет итерации по списку, беспокоиться не о чем. Если вы выполняете итерацию по нему, и он представляет запрос, который отправляется в базу данных, вероятно, было бы хорошо перечислить его явно (вызывая ToList или ToArray) и вместо этого воздействовать на результат.

...