0

一段时间以来一直被此错误困扰。基本上我有 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

有人知道如何解决吗?

4

1 回答 1

0

如果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 的反馈。

于 2013-10-18T01:50:16.533 回答