.NET Web API从SQL表创建时遇CS0029类型转换错误求助
解决错误CS0029:List无法转换为ActionResult<IEnumerable>
这个错误的核心是:你的控制器方法返回类型是ActionResult<IEnumerable<OptOut>>,但你直接返回了List<OptOut>实例,编译器没法自动完成这个隐式转换,给你两种简单的解决办法:
方法一:用Ok()方法包裹结果
Ok()是ASP.NET Core提供的方法,会把你的List包装成OkObjectResult(属于ActionResult的子类),完美匹配返回类型要求。示例代码:
[HttpGet] public ActionResult<IEnumerable<OptOut>> GetOptOuts() { var optOutList = _context.OptOuts.ToList(); return Ok(optOutList); }
方法二:将List显式转换为IEnumerable
因为ActionResult<IEnumerable<OptOut>>允许直接返回IEnumerable<OptOut>类型的实例,而List<OptOut>实现了IEnumerable<OptOut>接口,所以只需要显式转换或者用AsEnumerable()方法就行:
[HttpGet] public ActionResult<IEnumerable<OptOut>> GetOptOuts() { // 方式1:显式转换 IEnumerable<OptOut> optOuts = _context.OptOuts.ToList(); return optOuts; // 方式2:直接用AsEnumerable() // return _context.OptOuts.AsEnumerable(); }
为什么会报错?
ActionResult<T>类型支持两种返回场景:
- 返回一个继承自ActionResult的对象(比如返回错误状态码的NotFound()、BadRequest())
- 返回T类型的实例
你直接返回List<OptOut>时,它是IEnumerable<OptOut>的子类,但编译器不会自动把子类实例当成父类T的实例来完成隐式转换,所以要么用ActionResult包装,要么显式转成父类类型。
内容的提问来源于stack exchange,提问作者Scott
相关产品推荐
相关产品推荐

