Collections和List如何存储不同类型的对象?可能吗?

sly*_*dan 3 c#

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

因为集合和列表是arraylist的替代品

Jon*_*eet 6

如果需要存储各种类型,则需要将集合声明为所有其他类型兼容的类型.

例如,要将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)