C# 集合和列表如何存储不同类型的对象?可能吗?

C# 集合和列表如何存储不同类型的对象?可能吗?,c#,C#,泛型集合和列表如何存储不同类型的对象?可能吗 因为如果需要存储各种类型,集合和列表将替代arraylist,所以需要将集合声明为所有其他类型都兼容的类型 例如,要将内存流和文件流放在列表中,您可能需要一个列表: 那么,您需要使列表存储成为最常见的分母;如果要存储任何内容,您需要一个List()或List() 然而,根据我的经验,如果您发现自己是这样编码的,您可能需要重新考虑您的体系结构 也许您可以解释一下您试图实现的解决方案?泛型集合的主要优点是,您可以指定要存储在集合中的确切类型,而不需要装箱

泛型集合和列表如何存储不同类型的对象?可能吗


因为如果需要存储各种类型,集合和列表将替代arraylist,所以需要将集合声明为所有其他类型都兼容的类型

例如,要将
内存流
文件流
放在列表中,您可能需要一个
列表


那么,您需要使列表存储成为最常见的分母;如果要存储任何内容,您需要一个
List()
List()

然而,根据我的经验,如果您发现自己是这样编码的,您可能需要重新考虑您的体系结构


也许您可以解释一下您试图实现的解决方案?

泛型集合的主要优点是,您可以指定要存储在集合中的确切类型,而不需要装箱

您在这里有一些选择:

  • 您坚持使用
    System.collections
    命名空间中的非通用集合,这些集合将对象作为参数
  • 创建类型为object的泛型集合。这或多或少与上面的相同,但是您可以使用
    IEnumerable
    的所有扩展方法
  • 您创建了一个通用接口的通用集合,所有要存储的类型都可以实现该集合

我一直认为通过
检查类型通常是不受欢迎的?@KyleBaran:是的,这通常是个坏主意-就像在单个集合中混合类型通常是个坏主意一样。但有时这是所有选择中最不坏的。
List<Stream> streams = new List<Stream>();
streams.Add(new MemoryStream());
streams.Add(new FileStream(...));
List<object> objects = new List<object>();
objects.Add("hello"); // A String
objects.Add(5); // An Int32
objects.Add(new Button());
objects.Add(Guid.NewGuid());
string maybeString = objects[0] as string;
if (maybeString != null)
{
    Console.WriteLine("String of length {0}", maybeString.Length);
}