配列は固定長であり、配列を作成するときに格納できる要素数が決定されます。 配列の長さ(格納できる要素数)を超えるインデックスを指定すると実行時に例外IndexOutOfRangeExceptionがスローされます。 配列が自動的に拡張されるといったことは行われません。

配列の長さを超えるインデックスを参照しようとした場合
using System;

class Sample {
  static void Main()
  {
    // 長さが3(格納できる要素数が3)の文字列型配列を作成
    var users = new string[3];

    users[2] = "Charlie";   // 配列の2番目(最後)の要素として"Charlie"を設定 (問題なく動作する)
    users[3] = "Dave";      // 配列の3番目(最後の一つ後)の要素として"Dave"を設定 (インデックスが範囲外のため例外がスローされる)
  }
}
実行結果
ハンドルされていない例外: System.IndexOutOfRangeException: インデックスが配列の境界外です。
   場所 Sample.Main()

つまり、JavaScript等の言語では認められている次のような操作は、.NETにおける配列ではサポートされません。

JavaScript等では認められているこのような操作を行うことはできない
// 配列を作成
var users = new Array();

users[2] = "Charlie"; // 配列の2番目に"Charlie"を設定 (ここでarr.length = 3となる)
users[3] = "Dave";    // 配列の3番目に"Dave"を設定 (ここでarr.length = 4となる)

可変長の配列が必要な場合は、ジェネリックコレクションクラスの一つであるListクラスを使うことができます。 ただし、Listクラスでも上記のように途中のインデックスに要素を追加するようなことはできません。

既存の配列を拡張する必要がある場合はArray.Resizeメソッドを使うことができます。