您可以在system.array中存储多种数据类型

时间:2013-01-09 19:34:53

标签: c# .net covariance

您可以在System.Array中存储多种数据类型吗?谷歌的所有点击都显示我无法做到这一点,除非数组是对象。

4 个答案:

答案 0 :(得分:10)

您永远不会直接使用System.Array

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

答案 1 :(得分:1)

您可以存储其数据类型等于或派生自数组数据类型的项目。这意味着可以存储多种数据类型,只要它们派生自公共基本类型,或实现公共接口。

答案 2 :(得分:1)

来自MSDN:

  

Array类是语言实现的基类   支持数组。但是,只有系统和编译器才能派生出来   显式来自Array类。用户应该使用该阵列   语言提供的结构。

另外:

  

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

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

答案 3 :(得分:0)

是的,Google首页上的所有答案都是错误的。 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