gpt4 book ai didi

C# 将泛型类作为参数传递给自定义方法

转载 作者:行者123 更新时间:2023-11-30 22:10:54 25 4
gpt4 key购买 nike

我正在尝试创建一个可以接受以下参数的通用函数。

  1. 类(class)类型 - classType
  2. 页码 - pageNum
  3. 页面大小 - pageSize
  4. 按列排序 - orderByColumn

下面是我尝试复制的函数示例。

 public List<T> GetDataPerPage<T>(IList<T> classType, int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;

return GetRepo<classType>().All(null).AsQueryable().Where(p => p.IsDeleted == false).OrderBy(p => p.orderByColumn).Skip(excludedRows).Take(pageSize).ToList();
}

我不确定它应该如何将 classTypeorderByColumn 传递给函数。

如有任何帮助,我们将不胜感激。谢谢

最佳答案

您不需要传递 classType参数,因为您将声明类型 T当你使用 GetDataPerPage<T>()方法,因此将其更改为:

public List<T> GetDataPerPage<T>(int pageNum, int pageSize, string orderByColumn)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;

return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(p => p.orderByColumn)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}

至于orderByColumn参数,如果你打算像你的例子一样做一个比较,然后传入一个 string很好,但是如果你想控制比较逻辑使用 string类型属性 T ,然后像这样传递一个委托(delegate):

public List<T> GetDataPerPage<T>(int pageNum, int pageSize, Func<T, string> orderBy)
{
if (pageSize <= 0) pageSize = 10; // TODO: Default pageSize for the Moment
if (pageNum <= 0) pageNum = 1;
int excludedRows = (pageNum - 1) * pageSize;

return GetRepo<T>().All(null)
.AsQueryable()
.Where(p => p.IsDeleted == false)
.OrderBy(orderBy)
.Skip(excludedRows)
.Take(pageSize)
.ToList();
}

用法:

var list = GetDataPerPage<T>(pageNum, pageSize, p => p.Property1);

关于C# 将泛型类作为参数传递给自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20534768/

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