如果需要存储各种类型,则需要将集合声明为所有其他类型兼容的类型.
例如,要将a MemoryStream和a FileStream放在一个列表中,您可能会有List<Stream>:
List<Stream> streams = new List<Stream>();
streams.Add(new MemoryStream());
streams.Add(new FileStream(...));
Run Code Online (Sandbox Code Playgroud)
对于更多不同类型,您可能需要尽可能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());
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,值类型值将被加框 - 而它们不会在该特定值类型的列表中.
要使用任何特定于类型的元素成员,您需要检查它们是否是正确的类型并强制转换它们,例如使用is和转换,或者as:
string maybeString = objects[0] as string;
if (maybeString != null)
{
Console.WriteLine("String of length {0}", maybeString.Length);
}
Run Code Online (Sandbox Code Playgroud)