【问题标题】:Return different types of Lists<> in Method (C#)在方法(C#)中返回不同类型的列表<>
【发布时间】:2018-07-09 09:46:52
【问题描述】:

目前我有一个执行数据库调用的方法,它返回一个DataTable,然后将其转换为List&lt;&gt;。由于我将此方法用于不同的数据库调用,我需要让它返回任何List&lt;&gt;。由于出现错误,目前这是不可能的:

Cannot convert List<T> to List<object>

如果我想返回任何列表,函数应该有什么返回类型? 例如结果列表的类型可能是:

List<MirrorDeployments>

或:

List<ProductionDeployments>

我的功能

public List<T> 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)
            {

                list = ConvertToList(dt, list).ToList();
            }
        }
    }
    return list;
}

【问题讨论】:

  • ConvertToList 方法也应该是通用的:ConvertToList&lt;T&gt;(dt, list)
  • 另外,从代码看来,ConvertToList 返回的是 IEnumerable,而不是 List。有一个ConvertToList().ToList() 有点傻,你不觉得吗?
  • 这与your previous question有何不同?
  • List<T> to List<object>的可能重复

标签: c#


【解决方案1】:

假设 ConvertToList 返回一个可枚举的 object

public List<T> Execute<T>(string strSql)
{
    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)
            {

                return ConvertToList(dt).Cast<T>().ToList();
            }
        }
    }
    return new List<T>();
}

我删除了参数list,因为看起来没什么用。

更好的选择是将ConvertToList 转换为通用方法ConvertToList&lt;T&gt;,正如其名称所述。

【讨论】:

  • 您已删除参数list,但您在ConvertToList(dt, list) 中使用它。所以也许你应该添加一行List&lt;T&gt; list = new List&lt;T&gt;(); 左右?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多