に複数のデータ型を格納できますSystem.Array
か? Google からのすべてのヒットは、配列がオブジェクトでない限り、これを行うことができないことを示しています。
4 に答える
System.Array
直接使用することはありません。
異なるタイプを保存する場合は、System.Collections.ArrayList
または を使用しますobject[]
MSDN から:
Array クラスは、配列をサポートする言語実装の基本クラスです。ただし、Array クラスから明示的に派生できるのは、システムとコンパイラだけです。ユーザーは、言語によって提供される配列構造を使用する必要があります。
また:
Type.IsArray および Type.GetElementType は、Array で期待される結果を返さない場合があります。これは、配列が Array 型にキャストされた場合、結果は配列ではなくオブジェクトになるためです。つまり、typeof(System.Array).IsArray は false を返し、typeof(System.Array).GetElementType は null を返します。
したがって、すべての場合において、 のインスタンスをSystem.Array
直接作成することは避けるべきです。
配列のデータ型と同等のデータ型または配列から派生したデータ型のアイテムを格納できます。これは、共通の基本型から派生するか、共通のインターフェイスを実装する場合に、複数のデータ型を格納できることを意味します。
はい、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