列出<>对象,不同类型,单独排序和提取类型?

Ace*_*ter 0 c# asp.net oop visual-studio

我有一些产品,任何,全部,或者没有一个可能与特定提交相关联.所有7个产品都是产品类的子类.我需要存储与提交相关联的所有产品,然后在我的表示层上检索它们和它们的字段数据.我一直在使用List<Product>,并且List<object>,但是当我使用OfType<EPL(specific subclass)>,我抛出一个错误,说我不能隐式转换systems.generic.IEnumerable<EPL>键入"产品".我试过演员,但无济于事.

当我使用prodlist.OfType<EPL>();时没有错误,但当我尝试将其存储在EPL"tempEpl"的实例中时,我得到上述与投射相关的错误.是什么赋予了?代码如下.

 ProductService pserv = new ProductService();
    IList<object> prodlist = pserv.getProductById(x);

    EPL tempEpl = new EPL();

    if ((prodlist.OfType<EPL>()) != null)
    {            
       tempEpl = prodlist.OfType<EPL>();  // this throws a conversion error. 

    }
Run Code Online (Sandbox Code Playgroud)

数据层

List<object> TempProdList = new List<object>();

    conn.Open();

    SqlCommand EplCmd = new SqlCommand(EPLQuery, conn);
    SqlDataReader EplRead = null;
    EplRead = EplCmd.ExecuteReader();

    EPL TempEpl = new EPL();
    if (EplRead.Read()) 
    {

        TempEpl.Entity1 = EplRead.GetString(0);
        TempEpl.Employees1 = EplRead.GetInt32(1);
        TempEpl.CA1 = EplRead.GetInt32(2);
        TempEpl.MI1 = EplRead.GetInt32(3);
        TempEpl.NY1 = EplRead.GetInt32(4);
        TempEpl.NJ1 = EplRead.GetInt32(5);
        TempEpl.PrimEx1 = EplRead.GetInt32(6);
        TempEpl.EplLim1 = EplRead.GetInt32(7);
        TempEpl.EplSir1 = EplRead.GetInt32(8);
        TempEpl.Premium1 = EplRead.GetInt32(9);
        TempEpl.Wage1 = EplRead.GetInt32(10);
        TempEpl.Sublim1 = EplRead.GetInt32(11);

        TempProdList.Add(TempEpl);
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 8

这段代码毫无意义:

Product tempEpl = new EPL();

if ((prodlist.OfType<EPL>()) != null)
{            
   prodlist.OfType<EPL>();
}
Run Code Online (Sandbox Code Playgroud)
  • 目前还不清楚你为什么要创建一个新EPL()的开始
  • OfType() 永远不会返回null - 它返回一个序列,该序列可能为空
  • OfType()根据你的if陈述正文,调用本身不会做任何有用的事情

理解OfType()返回序列而不是单个项目非常重要.我怀疑那是你以前失踪的东西.

我怀疑你想要:

Product tempEpl = prodList.OfType<EPL>().FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

这将分配的值null,以tempEpl是否有类型的任何元素EPLprodList,或所述第一EPL列表中的元件以其他方式.

(目前尚不清楚为什么List<object>要从数据层返回a .为什么不是List<Product>?)