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

标签 c# asp.net asp.net-mvc generics

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

  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/

相关文章:

c# - 如何理解在运行时 : WinForms, WinService 或 ASP.NET 中执行我的 dll 的上下文?

c# - 第一次外部登录尝试重定向回登录操作,第二次成功

future 是 c# XNA 还是 c++ directX11?

c# - Refit (C#) - 下载图像

c# - 如何正确创建对 Unity 对象的引用?

asp.net-mvc - FormCollection.AllKeys 和 FormCollection.Keys 之间的区别

javascript - 对象未定义或为空

c# 时区问题

c# - 响应重定向不起作用

c# - 如何为 ASP.Net 自定义控件提供新的自定义事件