В заявлении Select...Case
есть ли способ пропускать чеки на основе предусловия?Условно пропускать чехлы
Что я делаю сейчас, используя невероятно глупый пример:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case number
Case 0, 2, 4, 6, 8
If includeEvenNumbers Then
Console.WriteLine(number)
End If
Case 1, 3, 5, 7, 9
If includeOddNumbers Then
Console.WriteLine(number)
End If
End Select
Next
End Sub
Иногда я даже писать свои дела наизнанку:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case True
Case includeEvenNumbers
If number Mod 2 = 0 Then
Console.WriteLine(number)
End If
Case includeOddNumbers
If number Mod 2 <> 0 Then
Console.WriteLine(number)
End If
End Select
Next
End Sub
То, что я действительно хотел бы сделать вместо:
Private Sub PrintNumbers(includeEvenNumbers As Boolean, includeOddNumbers As Boolean)
For number As Integer = 0 To 9
Select Case number
Case 0, 2, 4, 6, 8 When includeEvenNumbers
Console.WriteLine(number)
Case 1, 3, 5, 7, 9 When includeOddNumbers
Console.WriteLine(number)
End Select
Next
End Sub
Обратите внимание, что я использовал When
ключевое слово, которое в настоящее время используется только в Try...Catch
блоков.
Можно ли это сделать? С кем я общаюсь, чтобы это произошло?
EDIT (1/2)
Что важно то, что этот код будет первым оценить When <expression>
. Только если он оценивается до True
, он будет продолжать оценивать Case <expression>
.
Основная причина, по которой я хочу сделать это, - это то, что я хотел бы написать случаи, когда условие теста выдает исключение, если обстоятельства правильные (или неправильные, в зависимости от того, как вы на это смотрите). Я бы хотел пропустить эти случаи, если условие является истинным.
EDIT (2/2)
Это довольно ясно теперь, что я прошу не возможно в текущей итерации VB. Поэтому я искал место для отправки запросов функций в команду разработчиков .NET, а затем выяснил, что у них есть платформа пользовательского обслуживания.
Короче говоря: если вы хотите, чтобы это реализовать, нажмите кнопку голосов на этой странице: https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4274712-add-when-keyword-support-to-select-case-stat
, вероятно, я не уловил вашу точку именно - почему бы не использовать LINQ вместо Select-Case заявление? – Rex
Другой вариант - просто пропустить 'Select' и сделать что-то вроде' If includeEvenNumbers AndAlso number Mod 2 = 0 Then Console.WriteLine (number) Else If includeOddNumbers AndAlso number Mod 2 <> 0 Then Console.WriteLine (number) End If'? – Tim
@Rex как бы вы поместили linq в это? –