c# - 在 C# 中返回自定义泛型方法
问题描述
我想从接受泛型类型的方法返回自定义泛型类型。我看过这篇文章,但它没有解释如何处理自定义返回类型,因为我需要将自定义类型转换为泛型类型。
将自定义类型转换为泛型类型的推荐方法是什么?
例如:我想打电话给:
var users = GetUsers<UsersDto>();
在哪里
internal IQueryable<T> GetUsers<T>()
{
var result = from u in db.Users
select new UsersDto()
{
UserID = u.ID,
UserName = u.Name
};
return result; //This is the problem as it can't convert UsersDto to T
}
编辑:
GetUsers 可能过于具体,并且可能会混淆为什么使用泛型是合适的。GetUsers 应该被称为 GetGridResults 之类的东西,它将驻留在基类中。每个子类将使用不同的结果填充网格。
解决方案
为了IQueryable<UsersDto>
从一个承诺返回的方法返回一个,和IQueryable<T>
之间必须有关系。T
UsersDto
您可以通过引入一个接口,将其应用于 DTO 并将通用参数约束到该接口来做到这一点:
public interface IUserDto
{
int UserID { get; set; }
string UserName { get; set; }
}
public class UserDto : IUserDto { ... }
public IQueryable<TUserDto> GetUsers<TUserDto>()
where TUserDto : class, IUserDto, new()
{
// ...
new TUserDto
{
UserID = u.ID,
UserName = u.Name
}
// ...
}
该接口是可选的,也可以直接约束为UserDto
.
推荐阅读
- jenkins - 在openshift中使用jenkins时,如何确保在正确的目录中调用了maven?
- php - 控制器 + 路由 + 视图
- java - Java.time - 解析一个月的名称不起作用
- javascript - 如何获取 ajax 响应的属性
- c# - 从 REST Web 服务返回 CSV 文件作为 C# 中的流
- reactjs - 使用 TypeScript 在 create-react-app 中的故事书
- c# - WebClient 抛出 SocketException(无效参数)
- sas - 在 proc tabulate (SAS) 的顶列中添加行百分比
- javascript - 从 vue-i18n 设置的 vuejs 默认属性
- haskell - 我在哪里可以找到 javadoc 样式的 Haskell 包文档?