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)
这段代码毫无意义:
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是否有类型的任何元素EPL中prodList,或所述第一EPL列表中的元件以其他方式.
(目前尚不清楚为什么List<object>要从数据层返回a .为什么不是List<Product>?)
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |