Почему в операторе switch требуется перерыв после возврата yield?

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

23
задан nawfal 17 May 2013 в 13:38
поделиться

3 ответа

Потому что yield return - это просто синтаксический сахар для генератора итератора, и вы фактически не выходите из какого-либо метода. А C # не допускает провалов в операторах switch (и, похоже, вам все равно здесь не нужно).

29
ответ дан 28 November 2019 в 23:18
поделиться

Почему требуется break после return yield в операторе switch?

Вопрос предполагает неправильную предпосылку. Оператор break не требуется после возврата yield в операторе switch. Например:

switch(x)
{
case 123:
    yield return 456;
    M();
    throw new Exception();
case 789: // and so on

Здесь у нас есть возврат yield в операторе switch, за которым не следует break. За ним следует вызов M (), а затем оператор throw. Это совершенно законно.

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

Конечные точки break, continue, return, goto, return и throw недостижимы, потому что все эти операторы переходят в другое место и не возвращаются, так что токен кода, непосредственно следующий за ними, недоступен. Это контрастирует, скажем, с вызовом метода, который переходит в другое место, а затем возвращается, или возвратом yield, который передает управление обратно вызывающей стороне; когда вызывающий объект передает управление обратно блоку итератора, управление будет происходить с того места, где остановился yield return, поэтому конечная точка yield return достижима.

Если вас интересует эта тема, рекомендую прочитать раздел 8.1 спецификации.

17
ответ дан 28 November 2019 в 23:18
поделиться

У "нормального" возврата есть две функции:

  1. Пометить возвращаемое значение функции.
  2. Передача управления вызывающей стороне.

Возврат с выходом только отмечает возвращаемое значение; он не влияет на поток управления. После оператора yield return выполнение программы продолжается на следующей строке, где в вашем примере необходим break, как и в любом другом операторе switch-case.

2
ответ дан 28 November 2019 в 23:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: