作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个接口(interface) ( IAnimal
),它由 Bear 和 Goat 这两个类实现。
在运行时,我可能会得到一个熊或山羊列表,但无论是哪一个,都需要将它们分配给属性 IEnumerable<IAnimal>
这有效,因为 IEnumerable
是协变的。
但是,我现在需要从 IEnumerable<IAnimal>
中删除项目这当然行不通。
我需要做什么才能删除项目?
这是工作示例:
interface IAnimal {}
public class Bear : IAnimal {}
public class Goat : IAnimal {}
class Program
{
public static IEnumerable<IAnimal> CouldBeBearsOrGoats { get; set; }
static void Main(string[] args) {
var list = new List<int>() {1, 2, 3};
var bears = from l in list select new Bear();
var goats = from l in list select new Goat();
CouldBeBearsOrGoats = bears;
CouldBeBearsOrGoats = goats;
//How do I now remove an item?
}
}
如果我将 CouldBeBearsOrGoats 更改为列表,那么我可以删除项目,但我不能再分配任何类型。
public static List<IAnimal> CouldBeBearsOrGoats { get; set; }
列表会很长,所以我不想只复制列表并使用副本。我正在做的是处理列表中的每个项目,然后将其删除,直到列表为空。
最佳答案
由于您的源数据无论如何都是 IEnumerable,因此您必须将其转换为 List 才能添加/删除元素。
List<IAnimal> ListOfAnimals1 = bears.Cast<IAnimal>().ToList();
List<IAnimal> ListOfAnimals2 = goats.Cast<IAnimal>().ToList();
关于c# - 如何将 List<Bear> 或 List<Goat> 分配给 List<IAnimal>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17913387/
我有一个接口(interface) ( IAnimal ),它由 Bear 和 Goat 这两个类实现。 在运行时,我可能会得到一个熊或山羊列表,但无论是哪一个,都需要将它们分配给属性 IEnumer
我是一名优秀的程序员,十分优秀!