【问题标题】:Using ternary operator with return使用带返回的三元运算符
【发布时间】:2018-07-24 20:34:10
【问题描述】:

为什么我不能快捷方式:

if (await query.AnyAsync())
{
     return new ObjectResult(query);
}
     else
{
     return NotFound();
}

到这里:

await query.AnyAsync() ? return new ObjectResult(query) : return NotFound();

我怎样才能快捷方式呢?

【问题讨论】:

  • var result = await query.AnyAsync() ? new ObjectResult(query) : NotFound(); return result ; 你就是这样做的
  • 这个怎么样:return await query.AnyAsync() ? new ObjectResult(query) : NotFound();?
  • 是什么阻止您使用条件运算符? (如果您有 C# 错误,请将其包含在问题中。)
  • @Chetan Ranparia - 我仍然遇到类似这样的错误:“无法确定条件表达式的类型,因为 'Microsoft.AspNetCore.Mvc.ObjectResult' 和 'Microsoft. AspNetCore.Mvc.NotFoundResult'。
  • @Tetsuya Yamamoto - 我遇到了与 Chetan Ranpariya 案例相同的错误

标签: c# .net ternary-operator


【解决方案1】:

这并不完全符合您的要求,但无论如何:

这些行是错误的:

if (await query.AnyAsync())
{
     return new ObjectResult(query);
}

您的查询已经实现,在这种情况下,查看它是否有任何条目是没有意义的异步。那将是简单明了的开销。或者它没有实现,在这种情况下你的Any 调用是无用的,因为它只会实现一次然后检查它是否有条目然后再次实现它以获得你的结果。如果在这些调用之间您的源发生了某些变化,那么第二个调用也可能不包含任何条目。最好的情况是相同结果的运行时间加倍。

所以如果你想简化和纠正它:

var materialized = query.ToList();

if (materialized.Count != 0)
{
     return new ObjectResult(materialized);
}

return NotFound();

它并没有变得更简单。这里不需要三元运算符。

如果您想要三元运算符,则需要确保它获得相同类型的表达式,而不是语句 (@987654324 @ 是语句,0 是表达式):

var materialized = query.ToList();

return (materialized.Count != 0)
    ? (IActionResult)new ObjectResult(materialized)
    : (IActionResult)NotFound();

【讨论】:

    【解决方案2】:

    你错过了一个演员表。要使用条件表达式,您需要将它们强制转换为相同的返回类型,例如

    return await query.AnyAsync() ? (ActionResult)new ObjectResult(query) : (ActionResult)NotFound();
    

    【讨论】:

      猜你喜欢
      • 2017-03-28
      • 1970-01-01
      • 2012-08-28
      • 2020-02-09
      • 1970-01-01
      • 2020-01-25
      • 2012-12-25
      • 2018-01-26
      相关资源
      最近更新 更多