传递带参数的通用方法
Pass Generic Method With Parameter
我有以下代码,它允许我将方法作为参数传递。
Items = Scroll(Items, SearchCriteria, Execute(() => ItemService.GetItemsAsync(SearchCriteria)));
我的Scroll
class然后看起来像这样
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;
我需要在 GetItemsAsync
中使用的参数中增加 PageIndex
,这是一个 属性。我可以更改 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);
但是我不知道如何将 method/func 传递到第一个代码片段中显示的初始代码中。
编辑:我已经将初始代码更改为此并且它似乎可以正常工作。
Items = Scroll(Items, SearchCriteria,
new Func<BaseCriteria, Task<List<Data.Entities.Item>>>(x => ItemService.GetItemsAsync(SearchCriteria)));
Items = Scroll(Items, SearchCriteria, x => ItemService.GetItemsAsync(SearchCriteria));
我曾经使用以下代码来解决我的问题。
我有以下代码,它允许我将方法作为参数传递。
Items = Scroll(Items, SearchCriteria, Execute(() => ItemService.GetItemsAsync(SearchCriteria)));
我的Scroll
class然后看起来像这样
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;
我需要在 GetItemsAsync
中使用的参数中增加 PageIndex
,这是一个 属性。我可以更改 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);
但是我不知道如何将 method/func 传递到第一个代码片段中显示的初始代码中。
编辑:我已经将初始代码更改为此并且它似乎可以正常工作。
Items = Scroll(Items, SearchCriteria,
new Func<BaseCriteria, Task<List<Data.Entities.Item>>>(x => ItemService.GetItemsAsync(SearchCriteria)));
Items = Scroll(Items, SearchCriteria, x => ItemService.GetItemsAsync(SearchCriteria));
我曾经使用以下代码来解决我的问题。