1

您可以存储多种数据类型System.Array吗?谷歌的所有点击都表明我不能这样做,除非数组是对象。

4

4 回答 4

11

你从不System.Array直接使用。

如果要存储不同的类型,请使用System.Collections.ArrayListobject[]

于 2013-01-09T19:36:00.863 回答
1

您可以存储其数据类型等同于或派生自数组数据类型的项。这意味着您可以存储多种数据类型,前提是它们派生自一个公共基类型,或者实现一个公共接口。

于 2013-01-09T19:38:03.737 回答
1

来自 MSDN:

Array 类是支持数组的语言实现的基类。但是,只有系统和编译器可以显式地从 Array 类派生。用户应该使用该语言提供的数组结构。

并且 :

Type.IsArray 和 Type.GetElementType 可能不会使用 Array 返回预期的结果,因为如果将数组强制转换为 Array 类型,则结果是对象,而不是数组。即 typeof(System.Array).IsArray 返回 false,typeof(System.Array).GetElementType 返回 null。

因此,在所有情况下,您都应该避免直接创建实例System.Array

于 2013-01-09T19:42:36.770 回答
0

是的,谷歌首页的所有答案都是错误的。C# 数组是协变的,因为 .Net 数组旨在支持多种语言。以下是示例:

class Animal { }
class Cow : Animal { }
class Tiger : Animal { }

 int one = 1;
 double two = 2.0d;
 ValueType[] foo = new ValueType[2];
 foo[0] = one;
 foo[1] = two;

 Animal[] animals = new Animal[2];
 animals[0] = new Cow();
 animals[1] = new Tiger();

 Object[] col = new string[2];
 col[0] = 2; // compiles but throws
于 2013-01-09T19:38:30.010 回答