Оператор if else без else?

Мне дали этот код, и в нем есть оператор If с двумя наборами фигурных скобок. Я предполагаю, что это оператор if else, но «иначе» нет

if (Value.Contains("WMD ESA"))
{
   UsersInfo.Add(Benefit.ToString());
}
{
   UsersInfo.Add(((decimal)Benefit.Amount().ToString());
}  

в соответствии с моими контрольными точками это работает нормально без каких-либо ошибок, поэтому я не уверен.

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

Scott Hannen 21.05.2019 19:17

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

Andrei Dragotoniu 21.05.2019 19:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
99
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это просто произвольный блок кода. Фигурные скобки здесь ничего не делают; их можно удалить. Функционально это то же самое, что и следующее:

if (Value.Contains("WMD ESA"))
{
   UsersInfo.Add(Benefit.ToString());
}

UsersInfo.Add(((decimal)Benefit.Amount().ToString());

IMO они должен должны быть удалены, если это предназначено, так как это довольно запутанно (и необычно, по моему опыту). Хотя просто убедитесь, что else не предназначен!

Интересно. Я пока уйду, так как эта программа находится в производстве, и я не хочу ничего ломать.

Austin Garrison 21.05.2019 19:08

@AustinGarrison - дело в том, что это настолько необычно, что я бы поставил свои деньги на отсутствующее здесь утверждение else. На самом деле это может привести к поломке быть в производстве. Вероятно, было бы целесообразно просмотреть его с коллегой, если вы не можете с полной уверенностью проверить, что это действительно предназначено.

Broots Waymb 21.05.2019 19:20

Мы вернулись на пару месяцев назад и посмотрели на предыдущую версию, действительно чего-то еще не хватает.

Austin Garrison 21.05.2019 20:09

Это не совсем так. Кажущийся посторонним {...} вводит новую область видимости пространства имен. В данном конкретном случае это пустая область.

Nicholas Carey 21.05.2019 21:19

@NicholasCarey - Это правда. Хотя во всех (во всех?) случаях, с которыми я сталкивался, где был только {...}, это была либо ошибка/опечатка (как здесь), либо разработчик другой «эры»/фона думал, что это «безопаснее». - на что было весело оттолкнуть...

Broots Waymb 21.05.2019 21:29

Чтобы понять и решить вашу проблему, вы должны узнать, как работает утверждение.

Statement :

Common actions include declaring variables, assigning values, calling methods, looping through collections, and branching to one or another block of code, depending on a given condition.

Different Type Of Statement

  • Declaration statements .

  • Expression statements .

  • Selection statements .

  • Iteration statements .

  • Jump statements .

  • Exception handling statements .

  • Checked and unchecked .

In this case we are using Selection statements .

Код :

Фигурные скобки обычно используются для придания области действия, но они необязательны.

Если мы проверим ваш код, у нас есть первый if с фигурными скобками, любой объект, объявленный внутри фигурных скобок if, будет виден только внутри области if, для вторых фигурных скобок есть любое утверждение, которое автоматически будет принадлежать родительской области.

код 1 :

 if (Value.Contains("WMD ESA"))
 {
     UsersInfo.Add(Benefit.ToString());
 }
 {
     UsersInfo.Add(((decimal)Benefit.Amount().ToString());
 }  

код 2 :

 if (Value.Contains("WMD ESA"))
 {
     UsersInfo.Add(Benefit.ToString());
 }

 UsersInfo.Add(((decimal)Benefit.Amount().ToString());

В заключение код 1 и код 2 логически эквивалентны.

Другие вопросы по теме