在C#中将不同类型存储在集合中

时间:2014-03-05 12:29:42

标签: c#

我的基本概念是在集合中存储不同的类,并根据接口类型检索项目。

所以解释会更好:

var list = new List<object>();

list.Add(new Dog());

list.Add(new Rose());

//Retrieve the stored value casting as IAnimal which has Ianimal interface...
list.Get<IAnimal>(); 

public class Dog : IAnimal
{
}

public class Rose : IPlant
{
}

有可能以某种方式,还是有更好的设计呢?

谢谢!

2 个答案:

答案 0 :(得分:5)

如果您想要检索IAnimal的所有项目,可以使用OfType<T>()扩展方法。

var animals = list.OfType<IAnimal>();

答案 1 :(得分:0)

我认为最好为您的存储列表再添加一个接口。它的封装更美观。

var list = new List<IStoredObject>();

list.Add(new Dog());

list.Add(new Rose());

//Retrieve the stored value casting as IAnimal which has Ianimal interface...
list.Get<IAnimal>(); 

public class Dog : IAnimal, IStoredObject
{
}

public class Rose : IPlant, IStoredObject
{
}

此外我猜@Fedor Hajdu