c# - 寻找我当前方法调用的 C# 泛型版本

标签 c# asp.net generics

我有两门课:

  • 员工
  • 员工详细信息

我有这样的Employee类方法:

public static Employee LoadEmployee(int id)
{
    StringBuilder selectQuery = new StringBuilder();

    string selectQuery = " my query with the parameter 'Id' ";
    dbGenerator _db = dbGenerator.Instance.Database;

    DbCommand selectCommand = _db.GetSqlStringCommand(selectQuery.ToString());
    _db.AddInParameter(selectCommand, "@id", System.Data.DbType.String, Id);

    //EXECUTE THE COMMAND
    using (IDataReader dr = _db.ExecuteReader(selectCommand))
    {
        if (dr.Read())
        {
            result = new Employee();
            Employee.LoadDataReader(result, dr);
        }

        dr.Close();
    }

    return result;
}

我有一个方法对 EmployeeDetails 类执行相同的操作...除了返回类型之外,没有任何变化。

我确信有一些方法可以最大限度地减少代码行数,并且使用 C# 泛型会更具可读性,并且泛型可以提供类型安全性,而无需多个实现的开销。

我需要一个可以像这样传递类对象、selectQueryParameterId 的方法

public static <T> LoadData<T>(Object object, string selectQuery, int paramId)
{
    // do stuff 

    // return <T>results;
}

如有任何建议,我们将不胜感激。

最佳答案

其他人关于仅使用 ORM 的建议很好,但如果您有充分的理由从头开始执行此层,您可以修改您的设计,使其看起来像这样:

public class Employee 
{
    public virtual void InitFromDataReader(DataReader dr) { }
}

public class EmployeeDetails : Employee
{
    public override void InitFromDataReader(DataReader dr) { }
}

public static TEmployee LoadEmployee<TEmployee>(int id) where TEmployee : Employee, new()
{
    using (DataReader dr = new DataReader()) 
    {
        var result = new TEmployee();
        result.InitFromDataReader(dr);
        return result;
    }
}

主要限制是您的实体对象需要有一个无参数构造函数,否则 LoadEmployee 方法无法正确创建它们。也就是说,除非您显式地将工厂对象作为参数传递给该方法。

关于c# - 寻找我当前方法调用的 C# 泛型版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396477/

相关文章:

.net - 如何根据传递给 VB.NET 泛型方法的类型执行条件逻辑

c# - 强制派生类实现接口(interface)

java - 通用 BinarySearchTree 中的 PostOrder 输出 (Java)

c# - 一种通用列表反序列化类?

c# - 如果数据库中的列发生变化,有没有办法不破坏代码?

asp.net - 覆盖页面级事件时调用基本方法

asp.net - 如何确定表的最后一次插入、更新或删除记录的时间?

c# - CombineLatest 是否保留了可观察量的顺序?

c# - 如何以编程方式将 CSS 类添加到 ASP.NET CheckBoxlist html 表项

javascript - getElementById.elements 没有拾取标签