2017-01-17 37 views
1

я споткнулся этим кусок кода:Зачем продолжать размещение после возврата урожая?

public IEnumerable<object> Process() 
{ 
    foreach (var item in items) 
    { 

     if (item.Created < DateTime.Now) 
     { 
      yield return item; 
      continue; 
     } 
    } 
} 

Может кто-то помочь мне понять, почему continue не ненужные в данном случае (VS не маркировать continue как избыточный оператор перехода потока управления)?

+3

VS не делает много вещей. Я подозреваю, что я запускаю VS, заявив, что установленный JetBrains Resharper укажет на его избыточность. – MickyD

+0

Действительно, VS не настолько умен, чтобы найти это, однако ReSharper получает проблему (протестирован на VS2010 и R # 2016) – HimBromBeere

+0

Возможно, написанный кем-то новым для 'yield 'ключевое слово в C#. Или кто-то пытается показать, как не делать вещи. – user3185569

ответ

7

yield return будет возвращать товар как часть перечислителя. Как только вызывающий метод запрашивает следующий элемент, код будет перезапущен в строке после yield return.

В этом конкретном случае continue является избыточным, поскольку цикл в дальнейшем не будет продолжать работать после этой точки. Но как общее приложение, оно имеет множество применений.