Если бы вы сделали это ...
if(name != null)
{
return new OkObjectResult($"Hello, {name}");
}
else
{
return new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
... приведение не было бы необходимо.
Преобразование типов необходимо в строке кода, которая есть в вашем вопросе из-за его использование троичного оператора (то есть a ? b : c
). При использовании троичного оператора оба элемента после предиката (b
и c
) должны иметь общий тип. OkObjectResult
и BadRequestObjectResult
- это два разных типа, поэтому без приведения это недопустимо.
Однако b
и c
оба наследуются от ActionResult
. При приведении OkObjectResult
к ActionResult
элемент BadRequestObjectResult
становится приемлемым, поскольку он также имеет тип ActionResult
.