簡體   English   中英

通過參數傳遞通用方法

[英]Pass Generic Method With Parameter

我有以下代碼,使我可以將方法作為參數傳遞。

Items = Scroll(Items, SearchCriteria, Execute(() => ItemService.GetItemsAsync(SearchCriteria)));

然后,我的Scroll類看起來像這樣

public InfiniteScrollCollection<T> Scroll<T>(InfiniteScrollCollection<T> source, BaseCriteria baseCriteria, Task<List<T>> serviceCall)
{
    this.BaseSearchCriteria = baseCriteria;

    source = new InfiniteScrollCollection<T>
    {
        OnLoadMore = async () =>
        {
            IsBusy = true;

            // load the next page
            this.BaseSearchCriteria.PageIndex = source.Count / this.BaseSearchCriteria.PageSize;

            var items = await serviceCall;

            IsBusy = false;

            // return the items that need to be added
            return items;
        },
        OnCanLoadMore = () =>
        {
            return source.Count < this.MaxCalls;
        }
    };

    DownloadDataAsync(source, serviceCall);

    return source;
}

我的問題出現在this.BaseSearchCriteria.PageIndex = source.Count / this.BaseSearchCriteria.PageSize;

我需要增加PageIndex ,它是GetItemsAsync使用的參數中的一個屬性。 我可以更改BaseSearchCriteria PageIndex屬性,但是await serviceCall不允許我將其作為參數傳遞。

那么,有什么辦法可以更改serviceCall參數?

我嘗試將scroll參數更改為

public InfiniteScrollCollection<T> Scroll<T>(InfiniteScrollCollection<T> source, BaseCriteria baseCriteria, Func<BaseCriteria, Task<List<T>>> serviceCall)

然后,我可以將更新的條件傳遞給serviceCall

var items = await serviceCall(this.BaseSearchCriteria);

但是然后我不知道如何將方法/函數傳遞到第一個代碼片段中所示的初始代碼中。

編輯:我已經將初始代碼更改為此,它似乎正在工作。

Items = Scroll(Items, SearchCriteria, 
            new Func<BaseCriteria, Task<List<Data.Entities.Item>>>(x => ItemService.GetItemsAsync(SearchCriteria)));
Items = Scroll(Items, SearchCriteria, x => ItemService.GetItemsAsync(SearchCriteria));

我曾經遵循以下代碼來解決我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM