繁体   English   中英

无法隐式转换类型&#39;System.Collections.Generic.List <Data.emp> &#39;到&#39;System.Collections.Generic.List <User.Employee> &#39;

[英]Cannot implicitly convert type 'System.Collections.Generic.List<Data.emp>' to 'System.Collections.Generic.List<User.Employee>'

被卡在这个错误了一段时间。 基本上我有2个C#类库HeldDeskBusinessData和HelpDeskBusinessUser(简称)

从HelpDeskBusinessData

     public List<Employee> GetAll()
    {
        HelpDeskDBEntities dbContext = new HelpDeskDBEntities();
        List<Employee> employees = dbContext.Employees.ToList();
        List<Employee> busEmployees = new List<Employee>();

        try
        {
            foreach (Employee emp in employees)
            {
                Employee empBus = new Employee();
                empBus.Title = emp.Title;
                empBus.FirstName = emp.FirstName;
                empBus.LastName = emp.LastName;
                empBus.PhoneNo = emp.PhoneNo;
                empBus.Email = emp.Email;
                empBus.DepartmentID = emp.DepartmentID;
                empBus.EmployeeID = emp.EmployeeID;
                busEmployees.Add(empBus);
            }//end foreach
        }//end try
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }//end catch
        return busEmployees;
    }//end getallemployees

来自HelpdeskBusinessuser的错误(标签)

    public List<EmployeeBusinessUser> GetAll()
    {

            EmployeeBusinessData empBD = new EmployeeBusinessData();
            List<Employee> empL = new List<Employee>();
            List<EmployeeBusinessUser> empBU = new List<EmployeeBusinessUser>();
            empL = empBD.GetAll(); /*error cant explicitly convert.  */
            try
            {
                foreach (Employee emps in empL)
                {
                    EmployeeBusinessUser empBus = new EmployeeBusinessUser();
                    empBus.Title = emps.Title;
                    empBus.FirstName = emps.FirstName;
                    empBus.LastName = emps.LastName;
                    empBus.PhoneNo = emps.PhoneNo;
                    empBus.Email = emps.Email;
                    empBus.DepartmentID = emps.DepartmentID;
                    empBU.Add(empBus);
                }//end foreach
            }//end try
            catch (Exception ex)
            {
                ErrorRoutine(ex, "EmployeeBusinessUser", "GetAll");
            }
            return empBU;
        }//end getallemployees

有人知道如何解决吗?

如果UserEmployee继承自Data.emp ,则可以执行以下简单的转换:

List<Data.emp> listDataEmps = empBD.GetAll();
if (listDataEmps == null)
{
    ... bummer ...
}

IEnumerable<UserEmployee> enumerableUserEmps = (IEnumerable<UserEmployee>) listDataEmps;

但是,如果UserEmployee不继承自Data.emp ,则可以将System.Linq.Enumerable.Select扩展方法与转换器方法一起使用:

IEnumerable<UserEmployee> listUserEmps = listDataEmps.Select(ConvertDataEmpToUserEmp);

ConvertDataEmpToUserEmp是一种将Data.emp数据类型转换为UserEmployee数据类型的方法:

static UserEmployee ConvertDataEmpToUserEmp(Data.emp item)
{
    ... do the conversion here ...
}

您将必须根据您的要求实现此Converter方法。

请注意,Select方法不会在内存中创建第二个列表,而只会创建遍历原始源列表的枚举器。

如果您的场景根据源列表需要一个独立的List而不是一个Enumerator(例如,一个场景,其中该源列表可能在枚举器遍历时被另一个线程修改),则可以另外调用System.Linq.Enumerable .ToList扩展方法:

List<UserEmployee> listUserEmps = enumerableUserEmps.ToList();



边注:

无法将通用集合类型转换为另一个。 集合类型参数是否彼此继承都没有关系。 如果是这样,您可以做一些有趣的事情:

List<FileStream> listFS = new List<FileStream>();
List<object> listSomeObjects = (List<object>) listFS;

double d = 42.0;
listSomeObjects.Add((object) d); // <<-- This obviously doesn't make sense...

请注意,这个愚蠢的示例还暗示List <FileStream>对象实现方法Add(object item),该方法也没有任何意义。

编辑:我更新了我的答案,以回应MarcinJuraszek的反馈。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM