Удалить повторение из оператора if-else - PullRequest
1 голос
/ 02 июня 2011

Я написал оператор if...else, который использует массив myArr и строку myStr следующим образом:

If myArr.Length > 0 AndAlso myArr(0) = "-1" Then
  'Do stuff 1
ElseIf myStr= "xyz" Then
  'Do stuff 2
ElseIf myArr.Length > 0 Then
  'Do Stuff 3
Else
  'Do Nothing
End If

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

Просто чтобы уточнить .... порядок выполнения каждого оператора имеет решающее значение. то есть материал 1 имеет приоритет над материалом 2, который имеет приоритет над материалом 3.

Ответы [ 6 ]

2 голосов
/ 02 июня 2011

Я не думаю, что вы сможете получить точно такой же поток более простым способом.

Либо вы собираетесь в конечном итоге делать разные вещи, либо делать дубликаты.Например:

If myArr.Length > 0 Then
   If myArr(0) = "-1" Then
      'Do stuff
   Else
      'Do stuff
   End If
ElseIf myStr= "xyz" Then
  'Do stuff
Else
  'Do Nothing
End If

Это приведет к тому, что mystr = "xyz" не произойдет, когда myArr (0) <> -1, тогда как это может произойти раньше.

1 голос
/ 02 июня 2011

Возможно, вы сможете избавиться от нескольких проверок на myArr.Length, используя вложенные операторы If, но это делает код менее понятным.

Подход

A clear (т.е. тот, который можно легко понять) - это такой, который позволяет вам читать фрагмент кода без необходимости запоминания контекста, в котором выполняется код. Вложив If операторов, нужно больше информации хранить в рабочей памяти читателей (или кратковременной памяти ), чтобы вывести значение кода.

0 голосов
/ 02 июня 2011
If myArr.Length > 0 Then
  If myArr(0) = "-1" Then
    ' Stuff 1
  Else
    ' Stuff 3
  End If
ElseIf myStr = "xyz"
' Stuff 2
End If

... больше не нужно

0 голосов
/ 02 июня 2011

То, что вам нужно, будет вложено, если

If myArr.Length > 0 Then
  'Do stuff for non zero length
    If myArr(0) = "-1" Then
       'Do stuff for -1 and you already have checked for array length
    End If 
End If
0 голосов
/ 02 июня 2011

Я думаю, это бы сработало:

If myArr.Length > 0 Then
   If myArr(0) = "-1" Then
      'Do stuff
   Else
      'Do stuff
   End If
ElseIf myStr= "xyz" Then
  'Do stuff
Else
  'Do Nothing
End If
0 голосов
/ 02 июня 2011

Вы можете разложить операторы так:

If myArr.Length > 0 Then
    If myArr(0) = "-1" Then
       'Do stuff
    Else
       'Do sstuff
    End If
Else
    If myyStr= "xyz" Then
        'Do stuff
    End If
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...