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

C# 在C中的集合中存储不同的类型#,c#,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 : I

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

因此,更好的解释是:

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
{
}
var list=newlist();
添加(新狗());
添加(新玫瑰());
//检索存储值转换为具有IAnimal接口的IAnimal。。。
list.Get();
公家犬:IAnimal
{
}
公共类玫瑰:IPlant
{
}
这是可能的,还是有更好的设计


谢谢大家!

如果要检索属于
IAnimal
的所有项目,可以使用
OfType()
扩展方法

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

如果要检索
IAnimal
中的所有项目,可以使用
of type()
扩展方法

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

我认为最好为存储列表多制作一个界面。它的封装更漂亮

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
{
}
var list=newlist();
添加(新狗());
添加(新玫瑰());
//检索存储值转换为具有IAnimal接口的IAnimal。。。
list.Get();
公共级犬:IAnimal、iStoreObject
{
}
公共类:IPlant、iStoreObject
{
}

此外,我想使用@Fedor Hajdu时,最好为存储列表多制作一个接口。它的封装更漂亮

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
{
}
var list=newlist();
添加(新狗());
添加(新玫瑰());
//检索存储值转换为具有IAnimal接口的IAnimal。。。
list.Get();
公共级犬:IAnimal、iStoreObject
{
}
公共类:IPlant、iStoreObject
{
}

此外,我猜@Fedor Hajdu

也许你真的想要一本
字典
dictionary[typeof(IAnimal)]=newdog()
通常您会使用接口执行此类任务。然而,在您的示例中,
玫瑰
几乎没有任何共同之处,因此最好只为每个狗保留两个集合。毕竟C是强类型语言。也许你真的想要一本
字典
dictionary[typeof(IAnimal)]=newdog()
通常您会使用接口执行此类任务。然而,在您的示例中,
玫瑰
几乎没有任何共同之处,因此最好只为每个狗保留两个集合。毕竟C#是强类型语言。