Конструктор вспомогательных функций для добавочной загрузки коллекций в UWP C#

Как я могу добавить конструктор в свой IncrementalLoadingCollection. Я хочу добавить конструктор для передачи аргументов методу GetPagedItemsAsync для загрузки данных из API.

Моя коллекция инкрементной загрузки:

public class PeopleSource : IIncrementalSource<Person>
{
    private readonly List<Person> people;

    public PeopleSource(int maxValue)
    {
        // Creates an example collection.
        people = new List<Person>();

        for (int i = 1; i <= maxValue; i++)
        {
            var p = new Person { Name = "Person " + i };
            people.Add(p);
        }
    }

    public async Task<IEnumerable<Person>> GetPagedItemsAsync(int pageIndex, int pageSize)
    {
        // Gets items from the collection according to pageIndex and pageSize parameters.
        var result = (from p in people
                        select p).Skip(pageIndex * pageSize).Take(pageSize);

        // Simulates a longer request...
        await Task.Delay(1000);

        return result;
    }
}

Приведенный выше код является примером от Microsoft. Существует конструктор для People, который принимает аргумент с именем maxValue.

var collection = new IncrementalLoadingCollection<PeopleSource, Person>();

Приведенный выше код является инициализацией класса добавочной загрузки. Но куда мне передать maxValue Аргумент?? Пожалуйста, помогите мне...

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

То, что вы пытаетесь сделать, не имеет особого смысла, потому что функции/методы и конструкторы - это принципиально разные вещи.

GetPagedItemsAsync — это функция, которая возвращает значение (a Task<IEnumerable<Person>>). Конструкторы всегда возвращают только новые экземпляры объектов; в данном случае новый экземпляр PeopleSource.

Вы не можете создать конструктор PeopleSource, который принимает int maxSource и возвращает Task<IEnumerable<Person>>.

Обновлено:

В качестве альтернативы вы можете создать метод, который создает новый PeopleSource, а затем выполняет GetPagedItemsAsync метод.

public static Task<IEnumerable<Person>> GetPagedItemsAsync(int maxValue, int pageIndex, int pageSize)
{
    var instance = new PeopleSource(maxValue);
    return instance.GetPagedItemsAsync(pageIndex, pageSize);
}

Обратите внимание, что это менее чем оптимально, потому что, если вам нужно вызывать GetPagedItemsAsync несколько раз, он будет повторно заполнять экземпляр PeopleSource каждый раз, когда вы его вызываете. Это может быть очень дорого, если данные поступают из базы данных.

Обычно лучше создать PeopleSource, сохранить его в переменной, а затем вызывать GetPagedItemsAsync столько раз, сколько вам нужно для одного и того же экземпляра.

Есть ли альтернативный подход к этому??

CosmicPredator 23.04.2022 07:02

Я обновил свой ответ, включив в него возможную альтернативу. У других могут быть лучшие идеи.

Mike Hofer 23.04.2022 14:32

Другие вопросы по теме