作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个其他类扩展的 DbContext
类。例如:
class Contact extends DbContext {}
在 DbContext
类中,我想使用泛型中扩展 DbContext 的类:
public static IEnumerable<DBContext> GetAll( )
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<DBContext> (sql);
}
注意这里的 IEnumerable
上面的代码很好,但我每次都必须进行类型转换。我可以实现类似 thisClass
的东西吗:
public static IEnumerable<thisClass> GetAll( )
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<thisClass> (sql);
}
注意这里的 IEnumerable
在 DStanley 的评论之后:
我尝试过:
public static IEnumerable<T> GetAll<T>()
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<T> (sql);
}
但我不想这样调用:
Contact.GetAll<Contact>();
不干净。对吧?
注意:此处无需担心 TableName()。它根据调用的类以我的方式获取 SQL 方法。
最佳答案
您可以通过放置递归通用约束来按自己的方式工作。
首先,您需要一个通用的 DbContext<T>
(要么将您的 DbContext
更改为通用的,要么添加一个继承层)。在里面,定义你的方法:
public class DbContext<T> : DbContext
{
public static IEnumerable<T> GetAll()
{
var sql = "SELECT * FROM " + TableName();
return DB().Fetch<T> (sql);
}
}
那就让你的 child DbContext
从通用类继承:
public class Contact : DbContext<Contact>
{
}
现在你可以写Contact.GetAll();
.
关于c# 获取此类以供泛型使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925214/
我是一名优秀的程序员,十分优秀!