我遇到的问题是我要从列表中删除包含2种不同类型的特定项目。无论我尝试什么,我只是得到错误,我可以使用类型,如果我创建该类的新实例,它不会删除旧的。我真的被困在这里,我不知道该怎么做。
private List<Toys> toys = new List<Toys>();
toys.Add(new Ball("red"));
toys.Add(new MouseToy("gray"));
public abstract class Toys {}
public class Ball : Toys {}
public class MouseToy : Toys {}
//how do i remove only one of the types?
//beacuse this does not work witch is one of many things i tried
foreach(var toy in toys){
if (toy.GetType == Ball){
toys.Remove(toy)
}
}
这几乎是我用于列表的代码。
答案 0 :(得分:3)
你可以做到:
toys = toys.Where(toy=>!(toy is Ball)).ToList();
正如@Sefe在评论中提到的那样(感谢):你可以使用
来做到更简单,更好List<MouseToy> mouseToys = toys.OfType<MouseToy>().ToList();
如果您的新收藏品为List<MouseToy>
而不是List<Toys>
,那么您可以。如果你得到第三课CatToy
并且你仍然希望获得所有项目,而不是Ball
课程
答案 1 :(得分:1)
您的解决方案存在两个问题:
foreach
进行迭代的列表。这将导致InvalidOperationException
。 .GetType == Ball
不能像这样工作。请改用is
。 试试这个:
foreach(var toy in toys.ToArray()){
if (toy is Ball){
toys.Remove(toy);
}
}
您也可以使用LINQ:
foreach(var toy in toys.OfType<Ball>().ToArray()){
toys.Remove(toy);
}
答案 2 :(得分:1)