创建和初始化泛型 Class
Creating and Initializing a Generic Class
如何创建和初始化以下 class?具体来说,我正在努力 TSortKey
。我认为它会是这样的:
var p = new QueryParameters<Employees, e => e.LastName>(); // WRONG!!
public class QueryParameters<T, TSortKey> where T : class
{
public int Page { get; set; }
public int PageSize { get; set; }
public string Filter { get; set; }
public Func<T, TSortKey> SortSelector { get; set; }
public bool Ascending { get; set; }
}
我想做的是用上面的 QueryParameters
对象替换下面代码中的 GetEmployees
方法参数。
public QueryResults<Employees> GetEmployees<TSortKey>(int page, int pageSize, string filter, Func<Employees, TSortKey> sortSelector, bool asc)
{
IEnumerable<Employees> query = Employees;
if (filter != "*")
{
query = query.Where (e => e.LastName.StartsWith(filter));
}
if (sortSelector != null)
{
query = asc ? query.OrderBy(sortSelector) : query.OrderByDescending(sortSelector);
}
var results = new QueryResults<Employees>
{
TotalItems = query.Count(),
Items = query.Skip((page - 1) * pageSize).Take(pageSize)
};
return results;
}
public class QueryResults<T> where T : class {
public IEnumerable<T> Items { get; set; }
public int TotalItems { get; set; }
}
我想我很接近,但我也可能在左外野。
你有点偏左了。通用参数需要是类型名称(classes、结构、接口)。您似乎试图传递一个 lamdba 方法,它不是 class、结构或接口,因此它不会工作。
您可以做的是:
var p = new QueryParameters<Employee, string>();
p.SortSelector = e => e.LastName;
如何创建和初始化以下 class?具体来说,我正在努力 TSortKey
。我认为它会是这样的:
var p = new QueryParameters<Employees, e => e.LastName>(); // WRONG!!
public class QueryParameters<T, TSortKey> where T : class
{
public int Page { get; set; }
public int PageSize { get; set; }
public string Filter { get; set; }
public Func<T, TSortKey> SortSelector { get; set; }
public bool Ascending { get; set; }
}
我想做的是用上面的 QueryParameters
对象替换下面代码中的 GetEmployees
方法参数。
public QueryResults<Employees> GetEmployees<TSortKey>(int page, int pageSize, string filter, Func<Employees, TSortKey> sortSelector, bool asc)
{
IEnumerable<Employees> query = Employees;
if (filter != "*")
{
query = query.Where (e => e.LastName.StartsWith(filter));
}
if (sortSelector != null)
{
query = asc ? query.OrderBy(sortSelector) : query.OrderByDescending(sortSelector);
}
var results = new QueryResults<Employees>
{
TotalItems = query.Count(),
Items = query.Skip((page - 1) * pageSize).Take(pageSize)
};
return results;
}
public class QueryResults<T> where T : class {
public IEnumerable<T> Items { get; set; }
public int TotalItems { get; set; }
}
我想我很接近,但我也可能在左外野。
你有点偏左了。通用参数需要是类型名称(classes、结构、接口)。您似乎试图传递一个 lamdba 方法,它不是 class、结构或接口,因此它不会工作。
您可以做的是:
var p = new QueryParameters<Employee, string>();
p.SortSelector = e => e.LastName;