C# では、特殊な角括弧構文を使用して配列をインスタンス化できますnew int[3]
。これは、コンストラクターを呼び出してインスタンス化する他の型とは異なりますnew List<int>()
。通常の構文を使用して配列を作成できますか?
やってみnew System.Array<int>(3)
たけど吹っ切れた
非ジェネリック型 'System.Array' は型引数では使用できません
System.Array
それ自体は抽象的であるため、コンストラクターを使用してインスタンス化することはできません。そして、あなたのエラーからも明らかなように、実際には一般的でもありません。実行時にジェネリック コレクション インターフェイスを実装することによってのみ型を取得します(この関連する回答も参照してください)。
重要
.NET Framework バージョン 2.0 では、Array クラスは、、、およびジェネリック インターフェイスを実装
System.Collections.Generic.IList<T>
しSystem.Collections.Generic.ICollection<T>
ますSystem.Collections.Generic.IEnumerable<T>
。実装は実行時に配列に提供されるため、ドキュメント ビルド ツールには表示されません。
上記の理由により、クラスは代わりに使用できるSystem.Array
便利なメソッドを提供します。CreateInstance()
var array = Array.CreateInstance(typeof(int), 3);
備考
ほとんどのクラスとは異なり、パブリック コンストラクターの代わりにメソッドを
Array
提供して、レイト バインド アクセスを可能にします。CreateInstance
ただし、コンパイル時に結果が強く型付けされないため、このメソッドを使用する場合は十分に注意してください。強く型付けしたい場合は、作成後にキャストする必要があります(いいえ、単に宣言するだけでは十分ではありません)。array
int[] array
var array = (int[]) Array.CreateInstance(typeof(int), 3);
配列を作成するための「通常の」コンストラクタ構文はありません。唯一の選択肢は、配列コンストラクターの構文と、クラスnew type[length]
のさまざまな静的CreateInstance
メソッドです。Array
後者は戻り値の型Array
で定義されていることに注意してください。最初に実際の配列型にキャストする必要があります。
ところで: Array.CreateInstance
C# では使用できないゼロ以外の配列を作成することもできます。ただし、配列やその他の IList の実装がゼロ以外の下限を持つことを期待する人はほとんどいないことに注意してください。
配列をインスタンス化するときに値を割り当てる場合は、c# で次を使用することもできます。
definedIntArrayVariable = 新しい int[]{x,y,z};