gpt4 book ai didi

c# 获取此类以供泛型使用

转载 作者:太空狗 更新时间:2023-10-30 01:01:37 25 4
gpt4 key购买 nike

我有一个其他类扩展的 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/

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