ASP.NET Core开发CS1503:List<Employee>类型转换错误求助
错误产生原因
- 核心问题是命名冲突:你的
EmployeesApp.Controllers命名空间下的控制器类命名为Employee,和EmployeesApp.Models命名空间下的员工实体类重名。 - 在
Employee控制器内部编写代码时,没有加命名空间前缀的Employee类型,默认会被编译器识别为当前控制器类EmployeesApp.Controllers.Employee,而非你实际需要的员工实体类。 - 具体到报错场景:你定义的
SortEmployees方法的入参、返回值声明的List<Employee>都被识别为控制器类的集合,但是传入的employees是GetEmployees()返回的List<Models.Employee>,类型不匹配触发了CS1503转换错误。 - 额外隐藏问题:
SortEmployees方法中typeof(Employee)获取的也是控制器类的类型,后续反射拿实体属性也会失败。
解决方法
方案1:修改方法的类型声明(直接修复当前问题)
给SortEmployees方法中所有代表实体的Employee类型加上Models.前缀,明确指定为Model层的员工实体类,修改后的代码如下:
// 注意返回值和参数都改为List<Models.Employee> private List<Models.Employee> SortEmployees(List<Models.Employee> employees, String sortField, string currentSortField, SortDirection sortDirection) { if (string.IsNullOrEmpty(sortField)) { ViewBag.SortField = "EmployeeNumber"; // 顺带修复你这里的笔误:原来错误把SortDirection赋值给了SortField ViewBag.SortDirection = SortDirection.Ascending; } else { if (currentSortField == sortField) { ViewBag.SortDirection = sortDirection == SortDirection.Ascending ? SortDirection.Descending : SortDirection.Ascending; } else { ViewBag.SortDirection = SortDirection.Ascending; } ViewBag.SortField = sortField; } // 这里typeof也指定Models.Employee var propertyInfo = typeof(Models.Employee).GetProperty(ViewBag.SortField); if (ViewBag.SortDirection == SortDirection.Ascending) { employees = employees.OrderBy(e => propertyInfo.GetValue(e, null)).ToList(); } else { employees = employees.OrderByDescending(e => propertyInfo.GetValue(e, null)).ToList(); } return employees; }
方案2:遵循控制器命名规范(从根源避免冲突)
ASP.NET Core约定所有控制器类名都以Controller结尾,你可以直接把控制器类名从Employee改为EmployeeController,这样就不会和同名的实体类产生命名冲突,后续代码不需要加Models.前缀也能正确识别类型,同时也符合框架的路由匹配规则。
内容的提问来源于stack exchange,提问作者ha33
相关产品推荐
相关产品推荐

