【问题标题】:Instantiating a List from a method that returns a list从返回列表的方法实例化列表
【发布时间】:2013-10-13 23:54:11
【问题描述】:

我正在尝试将列表的新实例实例化为从不同 .dll 类中的方法接收的对象。当我这样做时,我得到一个类型转换错误:

无法隐式转换类型 System.Collections.Generic.List 到 System.Collections.Generic.List

这是我实例化它的方式:

public List<EmployeeBusinessUser> GetAll()
{
    EmployeeBusinessData empData = new EmployeeBusinessData();

    List<Employee> employees = new List<Employee>();
    List<EmployeeBusinessUser> retEmployees = new List<EmployeeBusinessUser>();

    try
    {
        //Here is where I am trying to get the list assigned to what is 
        //returned from the method call
        employees = empData.GetAll();
    }
    catch (Exception ex)
    {
        ErrorRoutine(ex, "EmployeeUserData", "GetAll");
    }

    return retEmployees;
}

感谢您的帮助。

编辑:GetAll() 方法:

 public List<Employee> GetAll()
    {
        HelpDeskDBEntities dbContext = new HelpDeskDBEntities();
        List<Employee> employees = new List<Employee>();

        try
        {
            employees = dbContext.Employees.ToList();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        return employees;
    }

【问题讨论】:

  • HelpDeskBusinessDataObject != HelpDeskBusinessUserObject
  • @PSL 的建议是正确的。您也尝试过声明为 var 吗?
  • 我知道。我正在调用一个名为 EmployeeBusinessData 的类中的一个方法,该类位于名为 HelpDeskBusinessDataObjects 的项目中。应该有我上面的这个方法调用 EmployeeBusinessData 中的方法并能够返回一个员工对象列表。
  • @PSL:有足够的理由将它们分开。亚伦。您可以查看AutoMapper 以(非常轻松地)将您的 DataObject 转换为您的 UserObject。

标签: c# asp.net sql


【解决方案1】:

您不能简单地在 2 个不同的命名空间中分配两个类。您需要有一个转换或翻译方法来映射这两者。

错误在命名空间中清楚地说明了它。 HelpDeskBusinessDataObject 与 HelpDeskBusinessUserObject

不能隐式转换类型 System.Collections.Generic.List&lt;HelpDeskBusinessDataObject.Employee&gt; to System.Collections.Generic.List&lt;HelpDeskBusinessUserObject.Employee&gt;

【讨论】:

    【解决方案2】:

    EmpData 是 EmployeeBusinessData 的一个实例。 employees 是一个员工列表。除非方法 GetAll() 返回,否则您不能简单地获取所有内容

    List<Employee>.  
    

    只需从 GetAll() 检查您的返回类型,并确保它返回的是员工列表。

    【讨论】:

    • 它正在返回一个员工列表,这就是为什么我对它为什么不起作用感到困惑。
    • 员工的命名空间是什么?您可能在一个实例中使用业务对象,而在另一个实例中使用数据对象。两者都称为Employee,但它们不是同一类型。
    • 我不确定你所说的命名空间是什么意思?我还在学习 VB/C# 代码,所以这是全新的。
    【解决方案3】:

    此错误仅表示您无法返回 HelpDeskBusinessDataObject 类型的列表,其中需要 HelpDeskBusinessUserObject。请发布对 GetAll() 方法的调用。

    【讨论】:

      【解决方案4】:

      您可以特别使用 Linq SelectHelpDeskBusinessDataObject.Employee 转换为 HelpDeskBusinessUserObject.Employee

      比如这样:

      empData.GetAll().Select(e => createBusinessUserEmployee(e)).ToList();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-07
        • 1970-01-01
        • 2012-07-22
        • 2012-02-08
        • 2014-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多