![](/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.