你如何在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;