Мне дали этот код, и в нем есть оператор If с двумя наборами фигурных скобок. Я предполагаю, что это оператор if else, но «иначе» нет
if (Value.Contains("WMD ESA"))
{
UsersInfo.Add(Benefit.ToString());
}
{
UsersInfo.Add(((decimal)Benefit.Amount().ToString());
}
в соответствии с моими контрольными точками это работает нормально без каких-либо ошибок, поэтому я не уверен.
Нет смысла пытаться понять, сломан он или нет, мы не можем этого знать. Вы должны поговорить с людьми в вашей команде, выяснить требования и запустить несколько тестов, чтобы увидеть, работает ли код должным образом.





Это просто произвольный блок кода. Фигурные скобки здесь ничего не делают; их можно удалить. Функционально это то же самое, что и следующее:
if (Value.Contains("WMD ESA"))
{
UsersInfo.Add(Benefit.ToString());
}
UsersInfo.Add(((decimal)Benefit.Amount().ToString());
IMO они должен должны быть удалены, если это предназначено, так как это довольно запутанно (и необычно, по моему опыту). Хотя просто убедитесь, что else не предназначен!
Интересно. Я пока уйду, так как эта программа находится в производстве, и я не хочу ничего ломать.
@AustinGarrison - дело в том, что это настолько необычно, что я бы поставил свои деньги на отсутствующее здесь утверждение else. На самом деле это может привести к поломке быть в производстве. Вероятно, было бы целесообразно просмотреть его с коллегой, если вы не можете с полной уверенностью проверить, что это действительно предназначено.
Мы вернулись на пару месяцев назад и посмотрели на предыдущую версию, действительно чего-то еще не хватает.
Это не совсем так. Кажущийся посторонним {...} вводит новую область видимости пространства имен. В данном конкретном случае это пустая область.
@NicholasCarey - Это правда. Хотя во всех (во всех?) случаях, с которыми я сталкивался, где был только {...}, это была либо ошибка/опечатка (как здесь), либо разработчик другой «эры»/фона думал, что это «безопаснее». - на что было весело оттолкнуть...
Чтобы понять и решить вашу проблему, вы должны узнать, как работает утверждение.
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 логически эквивалентны.
Хотя я не могу знать, это подозрительно похоже на пропажу
else. Как упоминалось в ответе, наличие этих скобок создает неопределенность. Нет ничего лучше, чем увидеть что-то, что работает, и подозревать, что оно не делает то, что должно, но вы не можете сказать. Если бы был пройденный модульный тест, который подтвердил ожидаемое поведение, это прояснило бы его.