无法隐式转换类型,存在显式转换(您是否缺少类型转换?)

时间:2019-07-19 07:28:54

标签: c# asp.net-mvc

我有一个错误:

  

(无法将类型'shenoy webapi.Models.PartIndex'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(是否缺少强制转换?)shenoywebapi D:\ shenoystudio \ shenoywebapi \ Controllers \ RateController .cs 69有效)

[Route("api/Rate/getproductrate")]
public IEnumerable<Rate> GetProductRate()
{
    var list = new List<Rate>();
    var dsRate = SqlHelper.ExecuteDataset(AppDatabaseConnection, CommandType.StoredProcedure, 0, "GetProductRates");

    if (dsRate.Tables[0].Rows.Count > 0)
    {
        foreach (DataRow row in dsRate.Tables[0].Rows)
        {
            list.Add(new Rate
            {
                Id = Convert.ToInt64(row[0]),
                SerialNumber = row[1].ToString(),
                ProductName = row[2].ToString(),
                Unit = row[3].ToString(),
                PartIndex = new PartIndex { Series = row[4].ToString() },
            });
        }
    }
    return list;
}

这是我的模特

namespace shenoywebapi.Models
{
    public class Rate
    {
        public long Id { get; set; }
        public DateTime wefDate { get; set; }
        public string SerialNumber { get; set; }
        public string ProductName { get; set; }
        public string Unit { get; set; }
        public long Rates { get; set; }
        public IEnumerable<PartIndex> PartIndex { get; set; }
    }
}
  

严重性代码描述项目文件行抑制状态   错误CS0266无法将类型'shenoywebapi.Models.PartIndex'隐式转换为'System.Collections.Generic.IEnumerable'。存在显式转换(是否缺少强制转换?)shenoywebapi D:\ shenoystudio \ shenoywebapi \ Controllers \ RateController.cs 69有效

3 个答案:

答案 0 :(得分:0)

在Rate类中,您将属性定义为:

public IEnumerable<PartIndex> PartIndex { get; set; }  

在您的函数中,您尝试将其分配为:

PartIndex = new PartIndex { Series = row[4].ToString() } 

因此,您尝试分配一个对象而不是IEnumerable。尝试将分配内容包装在new List() {...}中以对其进行修复。
该错误也很清楚地告诉您:

  

无法将类型'PartIndex'隐式转换为   'System.Collections.Generic.IEnumerable'

这意味着它不能自动将单个对象转换为仅包含该对象的IEnumerable。您必须手动执行。

答案 1 :(得分:0)

是这行

PartIndex = new PartIndex { Series = row[4].ToString() }

在您的模型中PartIndex必须为IEnumerable<PartIndex>,必须为

PartIndex = new List<PartIndex>() { new PartIndex() {Series = row[4].ToString()} }

答案 2 :(得分:0)

第一个IEnumerable<PartIndex>可以由List<PartIndex>创建 因此,创建IEnumerable就像

PartIndex = new List<PartIndex>();

并插入您的元素,如:

PartIndex = new List<PartIndex>() { new PartIndex() {Series = row[4].ToString()} }

最后,您可以看到它,它谈论IEnumrable和List。 IEnumerable vs List - What to Use? How do they work?