【问题标题】:Can I use the ? : syntax to decide what my method returns我可以使用吗? : 决定我的方法返回什么的语法
【发布时间】:2014-10-13 02:56:24
【问题描述】:

我在 WebAPI 中有一个执行 SQL 的操作方法:

var sql = @"UPDATE UserTestQuestion
            SET    AnswerGridResponses = @AnswerGridResponses,
                   Answered = 1
            WHERE  UserTestQuestionId = @UserTestQuestionId
            AND    UserId = @UserId;";
var parameters = new SqlParameter[]
{
    new SqlParameter("@CreatedBy", createdBy),
    new SqlParameter("@AnswerGridResponses", answerGridResponses),
    new SqlParameter("@TestQuestionId", testQuestionId)
};

var rc = await db.Database.ExecuteSqlCommandAsync(sql, parameters);
if (rc > 0)
{
    return Ok(rc);
}
else
{
    return BadRequest();
}

据我了解,ExecuteSqlCommandAsync 将返回一个数字给 指示更改了多少行。所以我添加了rc > 0 的支票。

有没有一种方法可以在不需要所有{} 的情况下做到这一点。我曾是 考虑使用 ? : 运算符,但我认为这些仅适用于设置值,不适用于我正在使用的返回。

【问题讨论】:

  • 不,继续使用它。
  • 你必须确保它们是相同的类型,而不仅仅是返回对象
  • 它被称为三元运算符。在 SQL 中,它就像一个 case when then end 语句。
  • 简单地返回零有什么问题?如果我进行的查询返回“0 rows queried”对我来说是有意义的。
  • 我希望这不是你的真实代码。拥有 EF 并对其运行普通查询。

标签: c# asp.net-web-api return-value null-coalescing-operator


【解决方案1】:

你可以做你想做的事。

return (rc > 0) ? Ok(rc) : BadRequest();

虽然有些人可能认为使用if/else 更干净。你不需要花括号,你可以这样做:

if (rc > 0)
    return Ok(rc);
else
    return BadRequest();

【讨论】:

    【解决方案2】:

    正如其他人所说,您绝对可以返回三元运算符的结果。需要注意的一件事是类型转换,因为它需要评估为单个返回类型。但是,只有在您尝试在特定条件下返回 null 时才会出现这种情况,在这种情况下,您可以将 null 强制转换为正确的类型。

    也就是说,最好将结果分配给一个变量,然后返回该变量。它读起来更干净,更重要的是,更容易调试。 (基本上每次我调试其中一个函数时,我最终都会将其更改为变量赋值,这样我就可以在离开函数之前看到该值。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2014-02-17
      • 2018-07-09
      • 1970-01-01
      相关资源
      最近更新 更多