gpt4 book ai didi

C# 将泛型委托(delegate)传递给构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:26 25 4
gpt4 key购买 nike

我是 C# 的新手,我试图找到一种将通用委托(delegate)传递给构造函数的方法。

调用显示端点时,如果有分页,端点应返回一个 Page 实例。创建 Page 实例时,委托(delegate)方法应作为构造函数参数之一传递。 ShowsEndpoints 将托管许多端点,其中许多端点使用分页。我只想使用一个类来处理所有端点。

public partial class ShowsEndpoints : Endpoint
{
public Func<Task<IEnumerable<object>>> FetchPopularShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchTrendingShowsAsyncDelegate;
public Func<Task<IEnumerable<object>>> FetchMostWatchedShowsAsyncDelegate;

public async Task<IEnumerable<object>> FetchPopularShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new PopularShowsRequest(page, limit));
}

public async Task<IEnumerable<object>> FetchTrendingShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new TrendingShowsRequest(page, limit));
}

public async Task<IEnumerable<object>> FetchMostWatchedShowsAsync(int page = 1, int limit = 20)
{
return await SendAsync(new MostWatchedShowsRequest(page, limit));
}
}

如果有下一页,将调用委托(delegate)来获取下一页的页面类。

public class Page<TItem, TDelegate>
{
private TDelegate _delegateCommand;

public int CurrentPage { get; }
public int TotalPages { get; }
public int PageItemsCount { get; }
public int TotalItemsCount { get; }
public IEnumerable<TItem> Items { get; }

public Page(int page, int totalPages, int itemsCount, int totalItemsCount, IEnumerable<TItem> items, TDelegate delegateCommand)
{
CurrentPage = page;
TotalPages = totalPages;
PageItemsCount = itemsCount;
TotalItemsCount = totalItemsCount;
Items = items;
_delegateCommand = delegateCommand;
}

public bool HasNext()
{
return CurrentPage <= TotalPages;
}

public bool HasPrevious()
{
return CurrentPage >= 1;
}

public Page<TItem, TDelegate> Next()
{
// call _delegateCommand to fetch the next page items
}

public Page<TItem, TDelegate> Previous()
{
// call _delegateCommand to fetch the previous page items
}
}

这可能吗?

谢谢。

编辑

为了更好地理解我的问题,我更新了我的类(class)代码。我有 3 个端点与他们的委托(delegate)相关联,我希望 Page 类使用这 3 个委托(delegate)中的任何一个具有相同的代码以避免重复。所以 _delegateCommand 可以是 FetchPopularShowsAsyncDelegateFetchTrendingShowsAsyncDelegateFetchMostWatchedShowsAsyncDelegate

最佳答案

我不确定我是否达到了 _delegateCommand 的目的对 - 我猜应该是函数返回 IEnumerable<TItem> .如果是这样,那么你就可以像这样声明它,然后你就不必再引入另一个泛型参数了:

public class Page<TItem>
{
private Func<IEnumerable<TItem>>_delegateCommand;

public int CurrentPage { get; }
public int TotalPages { get; }
public int PageItemsCount { get; }
public int TotalItemsCount { get; }
public IEnumerable<TItem> Items { get; }

public Page(int page, int totalPages, int itemsCount,
int totalItemsCount, IEnumerable<TItem> items,
Func<IEnumerable<TItem>> delegateCommand)
{
CurrentPage = page;
TotalPages = totalPages;
PageItemsCount = itemsCount;
TotalItemsCount = totalItemsCount;
Items = items;
_delegateCommand = delegateCommand;
}

public bool HasNext()
{
return CurrentPage <= TotalPages;
}

public bool HasPrevious()
{
return CurrentPage >= 1;
}
}

关于C# 将泛型委托(delegate)传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38086791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com