不能隐式转换类型.存在显式转换(您是否缺少强制转换?)

本文关键字:转换 是否 类型 存在 不能 显式转换 | 更新日期: 2023-09-27 18:10:40

我正在尝试使用ASP开发一个web应用程序。Net Web API。现在,在创建了产品模型和iproductrerepository接口之后,我在显示所有产品时遇到了困难。我收到错误信息

不能隐式地将类型System.Collections.Generic.IEnumerable<WebApplication1.Models.Product>转换为System.Collections.Generic.IEnumerable<WebApplication1.Product>。存在显式转换(您是否缺少强制类型转换?)

Controllers'ProductsController.cs 17 20 WebApplication1

在这行代码

return repo.GetAll();

我不知道该怎么办。如果有人指出问题并解释我做错了什么,那将非常有帮助。

ProductsController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebApplication1.Models;
namespace WebApplication1.Controllers
{
    public class ProductsController : ApiController
    {
        static readonly IProductRepository repo = new ProductRepository();
        public IEnumerable<Product> GetAllProducts()
        {
            return repo.GetAll();
        }
    }
}

ProductRepository.cs

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
namespace WebApplication1.Models
{
    public class ProductRepository : IProductRepository
    {
        public string cs = System.Configuration.ConfigurationManager.ConnectionStrings["MediaSoftAppEntities"].ConnectionString;
        public IEnumerable<Product> GetAll()
        {
            List<Product> products = new List<Product>();
            string sql = String.Format("Select [ProductID], [ProductName], [Price] FROM [Products]");
            using (SqlConnection con = new SqlConnection(cs)){
                using (SqlCommand cmd = new SqlCommand(sql, con)){
                    con.Open();
                    SqlDataReader dr = cmd.ExecuteReader();
                    while(dr.Read()){
                        Product product = new Product();
                        product.ProductID = dr.GetInt32(0);
                        product.ProductName = dr.GetString(1);
                        product.Price = dr.GetInt32(2);
                    }
                }
            }
            return products.ToArray();
        }
    }
}

IProductRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WebApplication1.Models
{
    public interface IProductRepository
    {
        IEnumerable<Product> GetAll();
    }
}

不能隐式转换类型.存在显式转换(您是否缺少强制转换?)

错误提示编译器认为
ProductsController.GetAllProducts想要返回一个WebApplication1.Product
但是IProductRepository.GetAll返回的是WebApplication1.Models.Product

在这两个不同的命名空间中有2个Product类吗?

或者,也许你以前在WebApplication1命名空间中有Product类,现在它被移动到WebApplication1.Models命名空间中,也许你只是有一个陈旧的引用和"重建所有"将修复它。

相关文章: