1

に複数のデータ型を格納できますSystem.Arrayか? Google からのすべてのヒットは、配列がオブジェクトでない限り、これを行うことができないことを示しています。

4

4 に答える 4

11

System.Array直接使用することはありません。

異なるタイプを保存する場合は、System.Collections.ArrayListまたは を使用しますobject[]

于 2013-01-09T19:36:00.863 に答える
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 に答える
1

配列のデータ型と同等のデータ型または配列から派生したデータ型のアイテムを格納できます。これは、共通の基本型から派生するか、共通のインターフェイスを実装する場合に、複数のデータ型を格納できることを意味します。

于 2013-01-09T19:38:03.737 に答える
0

はい、Google の最初のページからの回答はすべて間違っています。.Net 配列は多くの言語をサポートするように設計されているため、C# 配列は共変です。以下に例を示します。

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 に答える