#vb.net #if-statement
#vb.net #if-инструкция
Вопрос:
Я написал 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.
Комментарии:
1. 1 за вопрос, над которым стоит подумать, прежде чем врываться!
2. И 1 за оба ваших комментария за то, что вы не торопитесь! 🙂
Ответ №1:
Я не думаю, что вы сможете получить точно такой же поток более простым способом.
Либо вы в конечном итоге будете делать разные вещи, либо делать повторяющиеся вещи. например:
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» не будет выполняться whenn myArr(0) <> -1, тогда как это могло быть раньше.
Комментарии:
1. Ну что ж. Похоже, что мой код остается таким, какой он есть. Спасибо за продуманный ответ!
Ответ №2:
Вы могли бы избавиться от множественных проверок myArr.Length
с помощью вложенных If
инструкций, но это делает код менее понятным.
Понятный подход (т. Е. такой, который можно легко понять) — это тот, который позволяет вам прочитать фрагмент кода без необходимости запоминать контекст, в котором выполняется код. Благодаря вложенности If
инструкций в рабочей памяти считывателя (или кратковременной памяти) должно храниться больше информации, чтобы определить значение кода.
Ответ №3:
Я думаю, это помогло бы:
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
Комментарии:
1. Это не то же самое. В этом случае вы в конечном итоге будете выполнять оба параметра myArr (0) <> -1, даже если myStr = «xyz».
2. ДА. Боюсь, порядок имеет решающее значение.
3. Смотрите мой ответ. Не думайте, что вы можете изменить это, не нарушив его или не сделав более запутанным.
4. @JonEgerton если мои глаза меня не обманывают … это точно так же, как то, что я опубликовал 🙂
5. Код тот же. Но слова не являются. В основном ответ, похоже, «это не может быть упрощено».
Ответ №4:
Что вам нужно, так это вложенный if
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
Ответ №5:
If myArr.Length > 0 Then
If myArr(0) = "-1" Then
' Stuff 1
Else
' Stuff 3
End If
ElseIf myStr = "xyz"
' Stuff 2
End If
… больше ничего не требуется
Комментарии:
1. Спасибо, но проблема в том, что материал 2 должен иметь более высокий приоритет, чем материал 3.
2. Совершенно верно, я попал в безумную спешку, чтобы ответить на вопрос 🙂
Ответ №6:
Вы можете разложить инструкции следующим образом:
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
Комментарии:
1. Это не то же самое. В этом случае вы в конечном итоге будете выполнять как myArr(0) <> -1, так и myStr = «xyz»
2. Это отличается от when
myArr.Length > 0 AndAlso myyStr= "xyz"
.3. @Джон, я согласен, это не то же самое, что в исходном коде. Но это плохой тон и, безусловно, неясный способ комбинировать условия, которые логически вообще не ограничены. Я изменил код, не могли бы вы прокомментировать, пожалуйста?
4. @Освальд, чем это отличается?
5. @Zaur Я попытался прояснить свой вопрос сейчас, чтобы было ясно, в каком порядке «материал» должен быть выполнен. Это должен быть материал 1,2,3. Но с вашим предложенным методом это материал 1,3,2.