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);
}