泛型集合和List如何存储不同类型的对象?可能吗?
因为集合和列表是arraylist的替代
答案 0 :(得分:6)
如果您需要存储各种类型,则需要将您的集合声明为所有其他类型兼容的类型。
例如,要将MemoryStream
和FileStream
放在一个列表中,您可能会有一个List<Stream>
:
List<Stream> streams = new List<Stream>();
streams.Add(new MemoryStream());
streams.Add(new FileStream(...));
对于更多不同类型,您可能需要转到List<object>
:
List<object> objects = new List<object>();
objects.Add("hello"); // A String
objects.Add(5); // An Int32
objects.Add(new Button());
objects.Add(Guid.NewGuid());
请注意,在这种情况下,值类型值将被装箱 - 而它们不会在特定值类型的列表中。
要使用任何特定于类型的元素成员,您需要检查它们是否是正确的类型并进行转换,例如:使用is
和演员,或as
:
string maybeString = objects[0] as string;
if (maybeString != null)
{
Console.WriteLine("String of length {0}", maybeString.Length);
}
答案 1 :(得分:1)
好吧,你需要让列表存储最常见的分母;如果您想存储任何内容,则需要List<object>()
或List<IMyCommonInterface>()
。
但是,根据我的经验,如果您发现自己编码如此,则可能需要重新考虑您的架构。
也许您可以解释一下您想要实现的解决方案?
答案 2 :(得分:1)
通用集合的主要优点是您可以指定要存储在集合中的确切类型,而不需要装箱。
你有一些选择:
System.Collections
命名空间中的非通用集合,该集合将对象作为参数。IEnumerable<T>
存在的所有扩展方法。