Почему другая часть моего утверждения «если/то» не используется?

#c#

Вопрос:

У меня есть основной проект Entity Framework с этим HttpPut методом внутри моих контроллеров.

У меня есть оператор if/else, который проверяет два логических isValid значения и isDeleted .

При тестировании, когда я отправляю объект контроллеру со isValid значением true и isDeleted значением false, он отправляет правильное электронное письмо.

Но если я отправлю объект со isValid значением true и isDeleted значением true, он не отправит электронное письмо.

Является ли моя логика кода неуправляемой сумасшедшей?

Спасибо!

 [HttpPut("{id}")]  public async Tasklt;IActionResultgt; PutShoppingCart(long id, [FromBody] ShoppingCart shoppingCart)  {   _context.Entry(shoppingCart).State = EntityState.Modified;   try  {  await _context.SaveChangesAsync();  }  catch (DbUpdateConcurrencyException)  {  if (!ShoppingCartExists(id))  {  return NotFound();  }  else  {  throw;  }  }    if (shoppingCart.IsValid amp;amp; !shoppingCart.IsDeleted)  {  try  {  _customerEmailerProcess.SendCustomerEmail(shoppingCart,10);   }  catch (Exception ex)  {  await HttpResponseWritingExtensions.WriteAsync(this.Response, "lt;scriptgt;alert('"   HttpUtility.HtmlEncode(ex)   "')lt;/scriptgt;");  }  } else  {  if (shoppingCart.IsDeleted)  {  try  {  _customerEmailerProcess.SendCustomerEmail(shoppingCart, 20);   }  catch (Exception ex)  {  await HttpResponseWritingExtensions.WriteAsync(this.Response, "lt;scriptgt;alert('"   HttpUtility.HtmlEncode(ex)   "')lt;/scriptgt;");  }  }  }   return NoContent();  }  

Комментарии:

1. !shoppingCart.IsDeleted is с оператором not, когда вы устанавливаете оба значения true, он становится ложным, и также есть оператор amp;amp; между обоими условиями, что делает его в целом ложным, вы можете поставить ИЛИ A || B сделать его истинным в любом случае

2. !Тележка для покупок. IsDeleted это становится ложным в случае истинного.

3. выберите строку с if (ShoppingCart.isValid amp;amp; ShoppingCart. IsDeleted==ложь). это сработает, если ваш ввод для IsDeleted является ложным для первого письма.

4. Ваша логическая логика выглядит нормально, хотя и немного запутанно. Вы уверены, что не создается исключение?

5. если логика все еще не ясна, попробуйте поместить IsDeleted в дополнительный набор скобок if((!shoppingCart.IsDeleted) amp;amp; shoppingCart.IsValid)

Ответ №1:

Похоже, что ваше утверждение if/else должно работать, поэтому я предполагаю, что в методе SendCustomerEmail есть проблема, когда второй параметр равен 20. Ожидает ли метод, что объект ShoppingCart будет иметь значение isValid, равное true?

Самое простое, что можно сделать, чтобы решить эту проблему, — это запустить ее через отладчик и пройти через нее с помощью тележки для покупок.Свойству IsDeleted присвоено значение false.