![](/img/trans.png)
[英]Cannot Implicitly convert type 'System.Collections.Generic.list<fooClass>' to 'System.Collections.Generic.List<T>
[英]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.