Azure Функция возврата объекта типа приведения - PullRequest
1 голос
/ 14 января 2020

Пытается понять код по умолчанию return код из Azure Функция

return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");

Будет выполнено это в зависимости от значения name: если name равно null:

return new BadRequestObjectResult("Please pass a name on the query string or in the request body");

В противном случае:

return (ActionResult)new OkObjectResult($"Hello, {name}")

Мои вопросы:

  1. Почему используется литье типов для OkObjectResult, а не для BadRequestObjectResult?
  2. Почему нам даже нужно разыграть за OkObjectResult?

1 Ответ

1 голос
/ 14 января 2020

Если бы вы сделали это ...

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...