代码之家  ›  专栏  ›  技术社区  ›  Gucci

数据库功能

  •  0
  • Gucci  · 技术社区  · 6 年前

    我想编程一个c函数来处理所有返回 list<> 是的。既然我想让这个函数处理多个列表类型,我必须能够在函数中传递任何列表类型(例如 List<Student> ,请 List<Teacher> )中。我刚刚发现了一种解决方案方法,这种方法不太符合我的要求,因为我的方法无法返回值:

        private void Execute<T>(string strSql, List<T> list)
        {
            using (OracleConnection conn = new OracleConnection(cnnStr))
            {
                using (OracleCommand objCommand = new OracleCommand(strSql, conn))
                {
                    objCommand.CommandType = CommandType.Text;
                    DataTable dt = new DataTable();
                    OracleDataAdapter adp = new OracleDataAdapter(objCommand);
                    conn.Open();
                    adp.Fill(dt);
                    if (dt != null)
                    {
                        GetListType(list)
                        list = ConvertToList(dt).ToList();
                    }
                }
            }
        }
    

    因为我的参数是 List<T> 无法返回值,因为函数必须是空的。

    有什么建议可以让我在函数中传递任何列表并返回列表吗?

    多谢提前

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ross Miller    6 年前

    可以使用引用参数。它将通过引用传递您的列表,并允许在调用例程中对其进行更改。

    private void Execute<T>(string strSql, ref List<T> list)
    {
        using (OracleConnection conn = new OracleConnection(cnnStr))
        {
            using (OracleCommand objCommand = new OracleCommand(strSql, conn))
            {
                objCommand.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                OracleDataAdapter adp = new OracleDataAdapter(objCommand);
                conn.Open();
                adp.Fill(dt);
                if (dt != null)
                {
                    GetListType(list)
                    list = ConvertToList(dt).ToList();
                }
            }
        }
    }
    

    或者使用out参数,它需要首先在调用例程中声明

    private void Execute<T>(string strSql, List<T> list, out List<T> returnList)
    {
        using (OracleConnection conn = new OracleConnection(cnnStr))
        {
            using (OracleCommand objCommand = new OracleCommand(strSql, conn))
            {
                objCommand.CommandType = CommandType.Text;
                DataTable dt = new DataTable();
                OracleDataAdapter adp = new OracleDataAdapter(objCommand);
                conn.Open();
                adp.Fill(dt);
                if (dt != null)
                {
                    GetListType(list)
                    list = ConvertToList(dt).ToList();
                }
            }
        }
    
        returnList = list;
    
    }