如何将现有.NET代码转换为服务模式?求助返回类型错误问题
修复服务层返回类型错误的解决方案
Hey,我看到你在重构代码时遇到了服务层返回类型的问题——把返回类型设成void却想返回列表,这肯定会报错的,毕竟void就是表示方法啥也不返回呀。别担心,咱们一步步来修复:
第一步:修正服务层的返回类型
首先得把服务层List方法的返回类型从void改成能容纳子分类列表的类型。你现在返回的是匿名类型的集合,最直接的方式是用IEnumerable<dynamic>,既能正确返回数据,又能保持代码简洁:
// 修正后的服务层代码 public IEnumerable<dynamic> List(int catId) { return new GenericRepository<SupportSubCategory>(_factory.ContextFactory) .Get(filter: x => x.CatID == catId) .Select(x => new { SubId = x.SubCatID, SubName = x.SubCatName }) // 注意把拼写错误的SUbName改成SubName,保持命名规范 .ToList(); }
第二步:修正控制器层的小细节
另外,你控制器层的代码里参数重复写了类型int catId,这里只需要写catId就行,修正后代码如下:
// 修正后的控制器层代码 [HttpGet] public ActionResult GetCategor(int catId) { return Json(_service.List(catId), JsonRequestBehavior.AllowGet); }
进阶优化:使用强类型DTO(推荐)
如果想让代码更规范、类型更安全,我建议你定义一个专门的DTO(数据传输对象)类来封装返回的子分类数据:
// 新增的DTO类 public class SubCategoryDto { public int SubId { get; set; } public string SubName { get; set; } }
之后服务层就可以返回这个强类型的列表了:
// 使用DTO的服务层代码 public List<SubCategoryDto> List(int catId) { return new GenericRepository<SupportSubCategory>(_factory.ContextFactory) .Get(filter: x => x.CatID == catId) .Select(x => new SubCategoryDto { SubId = x.SubCatID, SubName = x.SubCatName }) .ToList(); }
这样做不仅代码可读性更高,后续维护也更方便,还能避免匿名类型带来的潜在问题。
内容的提问来源于stack exchange,提问作者Siddharth Rajput
相关产品推荐
相关产品推荐

