簡體   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