你如何在C#中使用I list?
我正试图列出一份清单你如何在C#中使用I list?,c#,list,base-class,C#,List,Base Class,我正试图列出一份清单 public class Base { } public class Item: Base { } 然后在另一个类中,我有属性requestList1 public List<Base> requestList1{ get; set; } public List requestList1{get;set;} 尝试: requestList1 = form.item.Cast<Item>() requestList1 = new List&l
public class Base
{
}
public class Item: Base
{
}
然后在另一个类中,我有属性requestList1
public List<Base> requestList1{ get; set; }
public List requestList1{get;set;}
尝试:
requestList1 = form.item.Cast<Item>()
requestList1 = new List<Item>(form.item)
requestList1=form.item.Cast()
requestList1=新列表(form.item)
错误CS0266无法隐式转换类型
“System.Collections.Generic.IEnumerable”到
“System.Collections.Generic.List”。存在显式转换
(你错过了演员阵容吗?)
你不能直接把它们扔给对方。考虑以下情况:
public class Base
{
}
public class Item: Base
{
}
public class EvilItem: Base
{
}
因此,让我们尝试从List
转换到List
:
现在a
和b
是两个完全不同的列表,恰好有相同的内容。请记住,更改一个列表不会更改另一个列表
或者,如果不需要修改列表,可以将其用作可枚举项:
IEnumerable<Base> c = a;
IEnumerable c=a;
为什么这样做有点长,但为了简化它-IEnumerable
只允许您阅读列表,所以您不能做添加evileItem
之类的坏事。这是允许的
至于为什么
requestList1=form.item.Cast()
不起作用,Cast()
生成一个IEnumerable
,而不是列表,因此您无法分配它。您可以将其更改为requestList1=form.item.Cast().ToList()
,这样可以工作,但它也会复制列表。实际上,这是另一种方法,尽管它的编写时间有点长,而且我也怀疑它的效率有点低(但我没有证据证明这一点)requestList1=form.item.OfType().ToList()
@TimSchmelter form.item是一个名为form的调用,其属性项为:public IList item{get;set;}requestList1=form.item.Cast().ToList()代码>从初始的form.item
类型为List
目标类型为List
您还没有解释为什么requestList1=form.item.Cast()
不起作用。@Enigmativity-um。。。我一定要吗?嗯,OP把它包括在他们的问题中。“这似乎是有关联的。”“神秘性”——好吧,补充说。我没有投反对票。我不知道是怎么回事。你回答得很好。现在投票。
b = new List<Base>(a);
IEnumerable<Base> c = a;