Razor Pages: не знаете, какие типы возвращаемых значений и когда их использовать.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Razor Pages: не знаете, какие типы возвращаемых значений и когда их использовать.

Сообщение Anonymous »

Меня обычно смущает «почему» (а не «как») использования определенных типов возврата C# в Razor Pages. В некоторых случаях я понимаю «почему», но не понимаю, когда мне следует использовать одно вместо другого. Моя первоначальная путаница началась с асинхронных типов, но теперь я это понимаю. Это также усугублялось типом void, который я немного лучше понимаю, но до сих пор не до конца понимаю.
Я изучаю несколько разных фрагментов кода, чтобы получить лучшее понимание, и мне могли бы пригодиться некоторые полезные объяснения - Документы и другие источники на самом деле не дают мне этого понять.
Некоторые методы взяты из некоторых DI и не обязательно актуально (я думаю, насколько я знаю это причина использования одного типа возврата вместо другого, и в этом случае я буду признателен за объяснение). Вот несколько различных фрагментов, которые, я надеюсь, сообщество поможет мне лучше понять, «почему» использование одного возвращаемого типа вместо другого (или мне следует просто придерживаться одного типа, поскольку это не повлияет на результат что делается).
Первое:

Код: Выделить всё

public void OnGet()
{
ServicesContainer = _helper
.GetRecentContentItemsByContentTypeAsync("Services")
.GetAwaiter()
.GetResult()
.SingleOrDefault();
ServicesList = _helper
.GetRecentContentItemsByContentTypeAsync("Service")
.GetAwaiter()
.GetResult()
.OrderByDescending(c => c.CreatedUtc)
.Take(3);
}
Сам код мне понятен без проблем — он извлекает контейнер и элементы списка внутри него. Моя страница Razor просто отображает элементы списка с помощью повторяющегося цикла foreach. Я также понимаю, что код получает эту информацию, и это самый простой пример. Так что, насколько я понимаю, проблем нет.
Во-вторых:

Код: Выделить всё

public async Task OnGetAsync(string projectTitle)
{
Project = _helper
.QueryContentItemsAsync(q => q
.Where(c => c.DisplayText == projectTitle))
.GetAwaiter()
.GetResult()
.SingleOrDefault();

var relatedProjects =
(IEnumerable)Project?
.Content
.Project.RelatedProjects?
.ContentItemIds?.ToObject();

if (relatedProjects?.Count() > 0)
{
RelatedProjects = await
_helper.GetContentItemsByIdAsync(relatedProjects);
}
}
Вышеуказанное также извлекает «контейнер», который может содержать элементы (RelatedProjects), но в данном случае это делается немного по-другому, поскольку может не быть ничего, что можно было бы перечислить, кроме проекта. сам. Но почему он использует Task, а не просто OnGet?
Третье:

Код: Выделить всё

public async Task OnGet()
{
HeaderInfo = await _helper
.GetContentItemByAliasAsync("alias:fullwidth");

return Page();
}
Здесь это всего лишь один элемент. Но опять же, зачем использовать Task и почему для возврата страницы, когда весь остальной код не требует возврата страницы? И почему он не использует OnGetAsync?
Ни в одном из элементов нет ничего особенного — все они хранятся на CMS (например, в них нет ничего динамического) . Первый — контейнер с элементами списка. Второй — элемент с потенциально связанными элементами (если они существуют в CMS, а их нет). Третий – это всего лишь один элемент.
И зачем использовать void в первом, а не в остальных?

Подробнее здесь: https://stackoverflow.com/questions/530 ... o-use-them
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»