Почему я должен использовать выбор выхода?

Вот несколько вопросов, которые я собрал относительно выбора выхода...

  • Есть ли причина использовать выбор exit в VB.NET?
  • Есть ли причина, связанная с производительностью?
  • Является ли выбор выхода равным break;?

Пример 1

Select case Name
case "Mary"
'...
case "John"
'...
case else

end select

Пример 2

Select case Name
case "Mary"
'...
exit select

case "John"
'...
exit select

case else

end select

Ответы

Ответ 1

Это не то же самое, что использовать ключевое слово break с операторами switch на языках C-типа. С помощью switch, если вы опустите контроль прерывания, он перейдет к следующему случаю. С Visual Basic Select управление не проходит; a break уже подразумевается.

Однако вы можете использовать его в качестве предложения охраны, чтобы избежать необходимости вставлять код другого уровня в блок if. Например:

Select Case SomeEnumVar
    Case SomeEnum.SomeValue1
         If Not SomeCondition Then Exit Select
         'Do something
    Case SomeEnum.SomeValue2
         'Do something else
    Case Else
         'Default case
End Select

Это немного лучше, чем этот эквивалентный код:

Select Case SomeEnumVar
    Case SomeEnum.SomeValue1
         If SomeCondition Then
             'Do something
         End If
    Case SomeEnum.SomeValue2
         'Do something else
    Case Else
         'Default case
End Select

Любая разница в производительности между этими двумя образцами практически невелика по сравнению с другими факторами.

Еще одно использование - если у вас много случаев, и один из случаев помещен так, что совпадение означает, что вы хотите прекратить проверку всех остальных. Это уже происходит, и поэтому у вас может быть просто пустой регистр. Но вы также можете добавить Exit Select, чтобы дать понять организаторам, что вы ожидаете, что этот случай больше ничего не сделает.

Ответ 2

Ну... Это похоже на использование goto... Как только вы нашли правильный случай, в "выходе" из дела нет смысла, поскольку в Visual Basic он будет исчезать. В С# вам нужно выйти из корпуса (в этом случае с перерывом).

Дело в том, что вы можете использовать его в середине области действия, например:

Case 1
   Do something
   Do something
   Evaluate
      exit select
   Else
      Do something

Это уродливо, но вы можете это сделать...