使用三元运算符返回

时间:2018-02-14 10:01:45

标签: c# .net ternary-operator

为什么我不能这样做:

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

到此:

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

如何快捷方式?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

这不是你要求的,但无论如何:

这些行错了:

let rec length_aux len = function
   a::l -> length_aux (len + 1) l
 | [] -> len

let length l = length_aux 0 l

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

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

Any

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

如果您想要三元运算符,则需要确保它获得相同类型的表达式,而不是语句({{ 1}}是一个语句,var materialized = query.ToList(); if (materialized.Count != 0) { return new ObjectResult(materialized); } return NotFound(); 是一个表达式):

return 0;
相关问题